promptlayer 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/claude-agents.d.mts +20 -0
- package/dist/claude-agents.d.ts +20 -0
- package/dist/claude-agents.js +2 -0
- package/dist/claude-agents.js.map +1 -0
- package/dist/esm/{chunk-SWBNW72U.js → chunk-DFBRFJOL.js} +2 -2
- package/dist/esm/{chunk-SWBNW72U.js.map → chunk-DFBRFJOL.js.map} +1 -1
- package/dist/esm/claude-agents.js +2 -0
- package/dist/esm/claude-agents.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/openai-agents.js +2 -2
- package/dist/esm/openai-agents.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/openai-agents.js +2 -2
- package/dist/openai-agents.js.map +1 -1
- package/package.json +18 -1
- package/vendor/claude-agents/trace/.claude-plugin/plugin.json +8 -0
- package/vendor/claude-agents/trace/hooks/hook_utils.py +38 -0
- package/vendor/claude-agents/trace/hooks/hooks.json +60 -0
- package/vendor/claude-agents/trace/hooks/lib.sh +577 -0
- package/vendor/claude-agents/trace/hooks/parse_stop_transcript.py +375 -0
- package/vendor/claude-agents/trace/hooks/post_tool_use.sh +41 -0
- package/vendor/claude-agents/trace/hooks/session_end.sh +37 -0
- package/vendor/claude-agents/trace/hooks/session_start.sh +57 -0
- package/vendor/claude-agents/trace/hooks/stop_hook.sh +123 -0
- package/vendor/claude-agents/trace/hooks/user_prompt_submit.sh +25 -0
- package/vendor/claude-agents/vendor_metadata.json +5 -0
- package/.github/CODEOWNERS +0 -1
- package/.github/workflows/node.js.yml +0 -30
- package/.github/workflows/npm-publish.yml +0 -35
- package/src/groups.ts +0 -16
- package/src/index.ts +0 -383
- package/src/integrations/openai-agents/helpers.test.ts +0 -254
- package/src/integrations/openai-agents/ids.ts +0 -27
- package/src/integrations/openai-agents/index.ts +0 -8
- package/src/integrations/openai-agents/instrumentation.test.ts +0 -46
- package/src/integrations/openai-agents/instrumentation.ts +0 -47
- package/src/integrations/openai-agents/mapping.ts +0 -714
- package/src/integrations/openai-agents/otlp-json.ts +0 -120
- package/src/integrations/openai-agents/processor.test.ts +0 -509
- package/src/integrations/openai-agents/processor.ts +0 -388
- package/src/integrations/openai-agents/time.ts +0 -56
- package/src/integrations/openai-agents/types.ts +0 -49
- package/src/integrations/openai-agents/url.ts +0 -9
- package/src/openai-agents.ts +0 -1
- package/src/promptlayer.ts +0 -125
- package/src/run-error-tracking.test.ts +0 -146
- package/src/span-exporter.ts +0 -120
- package/src/span-wrapper.ts +0 -51
- package/src/templates.ts +0 -37
- package/src/tracing.ts +0 -20
- package/src/track.ts +0 -84
- package/src/types.ts +0 -689
- package/src/utils/blueprint-builder.test.ts +0 -727
- package/src/utils/blueprint-builder.ts +0 -1453
- package/src/utils/errors.test.ts +0 -68
- package/src/utils/errors.ts +0 -62
- package/src/utils/streaming.test.ts +0 -498
- package/src/utils/streaming.ts +0 -1402
- package/src/utils/utils.ts +0 -1228
- package/tsconfig.json +0 -115
- package/tsup.config.ts +0 -20
- package/vitest.config.ts +0 -9
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{F as u}from"./chunk-DFBRFJOL.js";import a from"fs";import n from"path";import{fileURLToPath as l}from"url";var c=[".claude-plugin/plugin.json","hooks/hooks.json","hooks/lib.sh","hooks/session_start.sh","hooks/user_prompt_submit.sh","hooks/post_tool_use.sh","hooks/stop_hook.sh","hooks/session_end.sh","hooks/hook_utils.py","hooks/parse_stop_transcript.py"],i=n.join("vendor","claude-agents","trace");function g(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(o,s)=>s;let t=new Error().stack,r=t==null?void 0:t.map(o=>o.getFileName()).find(o=>o&&!o.startsWith("node:"));if(!r)throw new Error("PromptLayer Claude Agents could not determine its current module path.");return n.dirname(r.startsWith("file://")?l(r):r)}finally{Error.prepareStackTrace=e}}function d(){if(process.platform==="win32")throw new Error("PromptLayer Claude Agents integration does not support Windows. Use Linux or macOS.")}function P(){let e=g();return[n.resolve(e,"..","..","..",i),n.resolve(e,"..",i),n.resolve(e,"..","..",i)]}function f(e){let t=c.filter(r=>!a.existsSync(n.join(e,r)));if(t.length>0)throw new Error(`PromptLayer Claude Agents vendored plugin is incomplete. Missing: ${t.join(", ")}`)}function m(){for(let e of P())if(!(!a.existsSync(e)||!a.statSync(e).isDirectory()))return f(e),e;throw new Error("PromptLayer Claude Agents vendored plugin was not found in the installed package.")}function y(e={}){var p;d();let t=m(),r=u(e.apiKey),o=(p=e.traceparent)==null?void 0:p.trim(),s={TRACE_TO_PROMPTLAYER:"true",PROMPTLAYER_API_KEY:r};return o&&(s.PROMPTLAYER_TRACEPARENT=o),{plugin:{type:"local",path:t},env:s}}export{y as getClaudeConfig};
|
|
2
|
+
//# sourceMappingURL=claude-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/integrations/claude-agents/config.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { requirePromptLayerApiKey } from \"@/utils/utils\";\n\nexport interface GetClaudeConfigOptions {\n apiKey?: string;\n traceparent?: string;\n}\n\nexport interface PromptLayerClaudeAgentsPlugin {\n type: \"local\";\n path: string;\n}\n\nexport interface PromptLayerClaudeAgentsEnv {\n TRACE_TO_PROMPTLAYER: \"true\";\n PROMPTLAYER_API_KEY: string;\n PROMPTLAYER_TRACEPARENT?: string;\n}\n\nexport interface PromptLayerClaudeAgentsConfig {\n plugin: PromptLayerClaudeAgentsPlugin;\n env: PromptLayerClaudeAgentsEnv;\n}\n\nconst REQUIRED_PLUGIN_FILES = [\n \".claude-plugin/plugin.json\",\n \"hooks/hooks.json\",\n \"hooks/lib.sh\",\n \"hooks/session_start.sh\",\n \"hooks/user_prompt_submit.sh\",\n \"hooks/post_tool_use.sh\",\n \"hooks/stop_hook.sh\",\n \"hooks/session_end.sh\",\n \"hooks/hook_utils.py\",\n \"hooks/parse_stop_transcript.py\",\n] as const;\n\nconst VENDORED_PLUGIN_RELATIVE_PATH = path.join(\"vendor\", \"claude-agents\", \"trace\");\n\nfunction currentModuleDir(): string {\n const originalPrepareStackTrace = Error.prepareStackTrace;\n\n try {\n Error.prepareStackTrace = (_error, stack) => stack;\n const callsites = new Error().stack as unknown as NodeJS.CallSite[] | undefined;\n const currentFile = callsites\n ?.map((callsite) => callsite.getFileName())\n .find((fileName) => fileName && !fileName.startsWith(\"node:\"));\n\n if (!currentFile) {\n throw new Error(\n \"PromptLayer Claude Agents could not determine its current module path.\"\n );\n }\n\n return path.dirname(\n currentFile.startsWith(\"file://\") ? fileURLToPath(currentFile) : currentFile\n );\n } finally {\n Error.prepareStackTrace = originalPrepareStackTrace;\n }\n}\n\nfunction assertSupportedPlatform(): void {\n if (process.platform === \"win32\") {\n throw new Error(\n \"PromptLayer Claude Agents integration does not support Windows. Use Linux or macOS.\"\n );\n }\n}\n\nfunction candidatePluginRoots(): string[] {\n const moduleDir = currentModuleDir();\n\n // Support all package layouts we exercise in development and publishing:\n // - source tests run from src/integrations/claude-agents/config.ts\n // - CJS consumers load dist/claude-agents.js\n // - ESM consumers load dist/esm/claude-agents.js\n // Each build places the current module at a different depth relative to\n // vendor/claude-agents/trace, so we probe the known stable offsets.\n return [\n path.resolve(moduleDir, \"..\", \"..\", \"..\", VENDORED_PLUGIN_RELATIVE_PATH),\n path.resolve(moduleDir, \"..\", VENDORED_PLUGIN_RELATIVE_PATH),\n path.resolve(moduleDir, \"..\", \"..\", VENDORED_PLUGIN_RELATIVE_PATH),\n ];\n}\n\nfunction assertRequiredVendoredFiles(pluginRoot: string): void {\n const missingFiles = REQUIRED_PLUGIN_FILES.filter(\n (relativePath) => !fs.existsSync(path.join(pluginRoot, relativePath))\n );\n\n if (missingFiles.length > 0) {\n throw new Error(\n `PromptLayer Claude Agents vendored plugin is incomplete. Missing: ${missingFiles.join(\", \")}`\n );\n }\n}\n\nfunction resolvePluginRoot(): string {\n for (const candidate of candidatePluginRoots()) {\n if (!fs.existsSync(candidate)) {\n continue;\n }\n\n const stats = fs.statSync(candidate);\n if (!stats.isDirectory()) {\n continue;\n }\n\n assertRequiredVendoredFiles(candidate);\n return candidate;\n }\n\n throw new Error(\n \"PromptLayer Claude Agents vendored plugin was not found in the installed package.\"\n );\n}\n\nexport function getClaudeConfig(\n options: GetClaudeConfigOptions = {}\n): PromptLayerClaudeAgentsConfig {\n assertSupportedPlatform();\n\n const pluginPath = resolvePluginRoot();\n const apiKey = requirePromptLayerApiKey(options.apiKey);\n const traceparent = options.traceparent?.trim();\n\n const env: PromptLayerClaudeAgentsEnv = {\n TRACE_TO_PROMPTLAYER: \"true\",\n PROMPTLAYER_API_KEY: apiKey,\n };\n\n if (traceparent) {\n env.PROMPTLAYER_TRACEPARENT = traceparent;\n }\n\n return {\n plugin: {\n type: \"local\",\n path: pluginPath,\n },\n env,\n };\n}\n"],"mappings":"wCAAA,OAAOA,MAAQ,KACf,OAAOC,MAAU,OACjB,OAAS,iBAAAC,MAAqB,MAwB9B,IAAMC,EAAwB,CAC5B,6BACA,mBACA,eACA,yBACA,8BACA,yBACA,qBACA,uBACA,sBACA,gCACF,EAEMC,EAAgCC,EAAK,KAAK,SAAU,gBAAiB,OAAO,EAElF,SAASC,GAA2B,CAClC,IAAMC,EAA4B,MAAM,kBAExC,GAAI,CACF,MAAM,kBAAoB,CAACC,EAAQC,IAAUA,EAC7C,IAAMC,EAAY,IAAI,MAAM,EAAE,MACxBC,EAAcD,GAAA,YAAAA,EAChB,IAAKE,GAAaA,EAAS,YAAY,GACxC,KAAMC,GAAaA,GAAY,CAACA,EAAS,WAAW,OAAO,GAE9D,GAAI,CAACF,EACH,MAAM,IAAI,MACR,wEACF,EAGF,OAAON,EAAK,QACVM,EAAY,WAAW,SAAS,EAAIG,EAAcH,CAAW,EAAIA,CACnE,CACF,QAAE,CACA,MAAM,kBAAoBJ,CAC5B,CACF,CAEA,SAASQ,GAAgC,CACvC,GAAI,QAAQ,WAAa,QACvB,MAAM,IAAI,MACR,qFACF,CAEJ,CAEA,SAASC,GAAiC,CACxC,IAAMC,EAAYX,EAAiB,EAQnC,MAAO,CACLD,EAAK,QAAQY,EAAW,KAAM,KAAM,KAAMb,CAA6B,EACvEC,EAAK,QAAQY,EAAW,KAAMb,CAA6B,EAC3DC,EAAK,QAAQY,EAAW,KAAM,KAAMb,CAA6B,CACnE,CACF,CAEA,SAASc,EAA4BC,EAA0B,CAC7D,IAAMC,EAAejB,EAAsB,OACxCkB,GAAiB,CAACC,EAAG,WAAWjB,EAAK,KAAKc,EAAYE,CAAY,CAAC,CACtE,EAEA,GAAID,EAAa,OAAS,EACxB,MAAM,IAAI,MACR,qEAAqEA,EAAa,KAAK,IAAI,CAAC,EAC9F,CAEJ,CAEA,SAASG,GAA4B,CACnC,QAAWC,KAAaR,EAAqB,EAM3C,GALI,GAACM,EAAG,WAAWE,CAAS,GAKxB,CADUF,EAAG,SAASE,CAAS,EACxB,YAAY,GAIvB,OAAAN,EAA4BM,CAAS,EAC9BA,EAGT,MAAM,IAAI,MACR,mFACF,CACF,CAEO,SAASC,EACdC,EAAkC,CAAC,EACJ,CA3HjC,IAAAC,EA4HEZ,EAAwB,EAExB,IAAMa,EAAaL,EAAkB,EAC/BM,EAASC,EAAyBJ,EAAQ,MAAM,EAChDK,GAAcJ,EAAAD,EAAQ,cAAR,YAAAC,EAAqB,OAEnCK,EAAkC,CACtC,qBAAsB,OACtB,oBAAqBH,CACvB,EAEA,OAAIE,IACFC,EAAI,wBAA0BD,GAGzB,CACL,OAAQ,CACN,KAAM,QACN,KAAMH,CACR,EACA,IAAAI,CACF,CACF","names":["fs","path","fileURLToPath","REQUIRED_PLUGIN_FILES","VENDORED_PLUGIN_RELATIVE_PATH","path","currentModuleDir","originalPrepareStackTrace","_error","stack","callsites","currentFile","callsite","fileName","fileURLToPath","assertSupportedPlatform","candidatePluginRoots","moduleDir","assertRequiredVendoredFiles","pluginRoot","missingFiles","relativePath","fs","resolvePluginRoot","candidate","getClaudeConfig","options","_a","pluginPath","apiKey","requirePromptLayerApiKey","traceparent","env"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{A as wt,B as Et,C as yt,D as bt,E as $,a as P,b as F,c as Q,d as R,e as X,g as Z,h as tt,i as et,j as rt,k as ot,l as nt,m as st,n as it,o as at,p as ut,q as pt,r as ct,s as mt,t as lt,u as ht,v as ft,w as dt,x as Rt,y as gt,z as _t}from"./chunk-
|
|
1
|
+
import{A as wt,B as Et,C as yt,D as bt,E as $,a as P,b as F,c as Q,d as R,e as X,g as Z,h as tt,i as et,j as rt,k as ot,l as nt,m as st,n as it,o as at,p as ut,q as pt,r as ct,s as mt,t as lt,u as ht,v as ft,w as dt,x as Rt,y as gt,z as _t}from"./chunk-DFBRFJOL.js";var C=class{constructor(t,r,e=!0){this.create=()=>it(this.apiKey,this.baseURL,this.throwOnError);this.apiKey=t,this.baseURL=r,this.throwOnError=e}};import{SpanKind as k,SpanStatusCode as G}from"@opentelemetry/api";import{ExportResultCode as N}from"@opentelemetry/core";var J=class{constructor(t,r,e){this.apiKey=r,this.baseURL=e,this.enableTracing=t,this.url=`${this.baseURL}/spans-bulk`}attributesToObject(t){return t?Object.fromEntries(Object.entries(t)):{}}spanKindToString(t){return{[k.INTERNAL]:"SpanKind.INTERNAL",[k.SERVER]:"SpanKind.SERVER",[k.CLIENT]:"SpanKind.CLIENT",[k.PRODUCER]:"SpanKind.PRODUCER",[k.CONSUMER]:"SpanKind.CONSUMER"}[t]||"SpanKind.INTERNAL"}statusCodeToString(t){return{[G.ERROR]:"StatusCode.ERROR",[G.OK]:"StatusCode.OK",[G.UNSET]:"StatusCode.UNSET"}[t]||"StatusCode.UNSET"}toNanoseconds(t){return(BigInt(t[0])*BigInt(1e9)+BigInt(t[1])).toString()}export(t){if(!this.enableTracing)return Promise.resolve(N.SUCCESS);let r=t.map(e=>{var i;return{name:e.name,context:{trace_id:e.spanContext().traceId,span_id:e.spanContext().spanId,trace_state:((i=e.spanContext().traceState)==null?void 0:i.serialize())||""},kind:this.spanKindToString(e.kind),parent_id:e.parentSpanId||null,start_time:this.toNanoseconds(e.startTime),end_time:this.toNanoseconds(e.endTime),status:{status_code:this.statusCodeToString(e.status.code),description:e.status.message},attributes:this.attributesToObject(e.attributes),events:e.events.map(a=>({name:a.name,timestamp:this.toNanoseconds(a.time),attributes:this.attributesToObject(a.attributes)})),links:e.links.map(a=>({context:a.context,attributes:this.attributesToObject(a.attributes)})),resource:{attributes:F(P({},e.resource.attributes),{"service.name":"prompt-layer-js"}),schema_url:""}}});return tt(this.url,{method:"POST",headers:P({"Content-Type":"application/json","X-API-KEY":this.apiKey||""},Z()),body:JSON.stringify({spans:r})}).then(e=>e.ok?N.SUCCESS:(console.error(`Error exporting spans
|
|
2
2
|
HTTP error! status: ${e.status}`),N.FAILED)).catch(e=>(console.error("Error exporting spans:",e),N.FAILED))}shutdown(){return Promise.resolve()}},Ot=J;import*as St from"@opentelemetry/api";import{SimpleSpanProcessor as At}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Ct}from"@opentelemetry/sdk-trace-node";var b=(o="promptlayer-tracer")=>St.trace.getTracer(o),Tt=(o,t,r)=>{let e=new Ct,i=new Ot(o,t,r),a=new At(i);e.addSpanProcessor(a),e.register()};var Nt=b(),B=(o,t,r,e="",i="openai")=>{let a={construct:(s,u)=>{let n=Reflect.construct(s,u);return Object.defineProperties(n,{function_name:{value:e,writable:!0},provider:{value:i}}),new Proxy(n,a)},get:(s,u,n)=>{let l=s[u],d=`${Reflect.get(s,"function_name")}.${u.toString()}`;return typeof l=="object"?(Object.defineProperties(l,{function_name:{value:d,writable:!0},provider:{value:i}}),new Proxy(l,a)):typeof l=="function"?(...h)=>{var S,m,I,T,w,L;let O=new Date().toISOString(),M=Reflect.get(s,"provider"),g=(S=h[0])==null?void 0:S.return_pl_id,_=(m=h[0])==null?void 0:m.pl_tags,D=(I=h[0])==null?void 0:I.pl_warn_on_error;return(T=h[0])==null||delete T.return_pl_id,(w=h[0])==null||delete w.pl_tags,(L=h[0])==null||delete L.pl_warn_on_error,Nt.startActiveSpan(`${M}.${d}`,p=>R(null,null,function*(){try{p.setAttribute("function_input",JSON.stringify(h));let c=Reflect.apply(l,s,h),U=p.spanContext().spanId;return c instanceof Promise?new Promise((E,j)=>{c.then(y=>R(null,null,function*(){let v=yield et(o,t,{api_key:o,provider_type:M,function_name:d,request_start_time:O,request_end_time:new Date().toISOString(),request_response:y,kwargs:h[0],return_pl_id:g,tags:_,span_id:U},!D);p.setAttribute("function_output",JSON.stringify(v)),p.setAttribute("response_status","success"),p.end(),E(v)})).catch(y=>{p.recordException(y),p.setAttribute("response_status","error"),p.end(),j(y)})}):(p.setAttribute("function_output",JSON.stringify(c)),p.setAttribute("response_status","success"),p.end(),c)}catch(c){throw p.recordException(c),p.setAttribute("response_status","error"),p.end(),c}}))}:Reflect.get(s,u,n)}};return new Proxy(r,a)};import*as K from"@opentelemetry/api";var kt=(o,t,r)=>function(...e){let i=b(),a=s=>{try{r&&Object.entries(r).forEach(([n,l])=>{s.setAttribute(n,l)}),s.setAttribute("function_input",JSON.stringify(e));let u=t(...e);return u instanceof Promise?u.then(n=>(s.setAttribute("function_output",JSON.stringify(n)),s.setStatus({code:K.SpanStatusCode.OK}),n)).catch(n=>{throw Pt(s,n,e),n}).finally(()=>s.end()):(s.setAttribute("function_output",JSON.stringify(u)),s.setStatus({code:K.SpanStatusCode.OK}),s.end(),u)}catch(u){throw Pt(s,u,e),u}};return i.startActiveSpan(o,a)},Pt=(o,t,r)=>{o.setAttribute("function_input",JSON.stringify(r)),o.setStatus({code:K.SpanStatusCode.ERROR,message:t instanceof Error?t.message:"Unknown error"}),o.end()};var x=class{constructor(t,r,e=!0){this.get=(t,r)=>at(this.apiKey,this.baseURL,t,r,this.throwOnError);this.publish=t=>ut(this.apiKey,this.baseURL,t,this.throwOnError);this.all=t=>pt(this.apiKey,this.baseURL,t,this.throwOnError);this.apiKey=t,this.baseURL=r,this.throwOnError=e}};var Kt=(o,t,r,e=!0)=>{if(!(r.metadata instanceof Object))throw new Error("Please provide a dictionary of metadata.");for(let[i,a]of Object.entries(r.metadata))if(typeof i!="string"||typeof a!="string")throw new Error("Please provide a dictionary of metadata with key value pair of strings.");return rt(o,t,r,e)},xt=(o,t,r,e=!0)=>{if(typeof r.score!="number")throw new Error("Score must be a number");if(r.score<0||r.score>100)throw new Error("Score must be a number between 0 and 100.");return ot(o,t,r,e)},qt=(o,t,r,e=!0)=>{if(!(r.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return nt(o,t,r,e)},Mt=(o,t,r,e=!0)=>st(o,t,r,e),q=class{constructor(t,r,e=!0){this.group=t=>Mt(this.apiKey,this.baseURL,t,this.throwOnError);this.metadata=t=>Kt(this.apiKey,this.baseURL,t,this.throwOnError);this.prompt=t=>qt(this.apiKey,this.baseURL,t,this.throwOnError);this.score=t=>xt(this.apiKey,this.baseURL,t,this.throwOnError);this.apiKey=t,this.baseURL=r,this.throwOnError=e}};function Dt(o){if(o&&typeof o=="object"&&"status"in o&&typeof o.status=="number")return o.status}function jt(o){return o&&typeof o=="object"&&o.constructor?o.constructor.name:""}function It(o){let t=Dt(o),r=jt(o),e=o instanceof Error?o.message.toLowerCase():String(o).toLowerCase();return t===429||/ratelimit/i.test(r)?"PROVIDER_RATE_LIMIT":/timeout/i.test(r)?"PROVIDER_TIMEOUT":t===401||/authentication/i.test(r)?"PROVIDER_AUTH_ERROR":e.includes("quota")?"PROVIDER_QUOTA_LIMIT":e.includes("timeout")||e.includes("timed out")?"PROVIDER_TIMEOUT":t!==void 0?"PROVIDER_ERROR":"UNKNOWN_ERROR"}import*as Ut from"@opentelemetry/api";var Wt={openai:lt,anthropic:ft,"openai.azure":ht,google:Rt,vertexai:wt,"amazon.bedrock":Et,"anthropic.bedrock":yt,mistral:bt},Vt=o=>{if(!o||typeof o!="object"||Array.isArray(o))return!1;let t=["status","value","error_message","raw_error_message","is_output_node"];return Object.values(o).every(e=>typeof e!="object"||e===null?!1:t.every(i=>i in e))},Lt=class{constructor({apiKey:t=$("PROMPTLAYER_API_KEY"),baseURL:r=$("PROMPTLAYER_BASE_URL"),enableTracing:e=!1,throwOnError:i=!0}={}){if(t===void 0)throw new Error("PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.");this.apiKey=t,this.baseURL=r||"https://api.promptlayer.com",this.enableTracing=e,this.throwOnError=i,this.templates=new x(t,this.baseURL,this.throwOnError),this.group=new C(t,this.baseURL,this.throwOnError),this.track=new q(t,this.baseURL,this.throwOnError),this.wrapWithSpan=kt,e&&Tt(e,t,this.baseURL)}get Anthropic(){try{let t=Q("@anthropic-ai/sdk").default;return B(this.apiKey,this.baseURL,t,"anthropic","anthropic")}catch(t){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}get OpenAI(){try{let t=Q("openai").default;return B(this.apiKey,this.baseURL,t,"openai","openai")}catch(t){console.error("To use the OpenAI module, you must install the @openai/api package.")}}run(O){return R(this,arguments,function*({promptName:t,promptVersion:r,promptReleaseLabel:e,inputVariables:i,tags:a,metadata:s,groupId:u,modelParameterOverrides:n,stream:l=!1,provider:d,model:h}){return b().startActiveSpan("PromptLayer Run",g=>R(this,null,function*(){try{let _={promptName:t,promptVersion:r,promptReleaseLabel:e,inputVariables:i,tags:a,metadata:s,groupId:u,modelParameterOverrides:n,stream:l};g.setAttribute("function_input",JSON.stringify(_));let D=i,S={label:e,version:r,metadata_filters:s,provider:d,model:h,model_parameter_overrides:n};i&&(S.input_variables=i);let m=yield this.templates.get(t,S);if(!m)throw new Error(`Cannot proceed: prompt template '${t}' could not be fetched. Check the warnings above for the actual error.`);let I=m.prompt_template;if(!m.llm_kwargs){let f=`Prompt '${t}' does not have any LLM kwargs associated with it. Please set your model parameters in the registry in the PromptLayer dashboard.`;if(this.throwOnError)throw new Error(f);console.warn(`WARNING: ${f}`)}let T=m.metadata;if(!T)throw new Error(`Prompt '${t}' does not have any metadata associated with it.`);let w=T.model;if(!w)throw new Error(`Prompt '${t}' does not have a model parameters associated with it.`);let L=m.custom_provider,p=new Date().toISOString(),{provider_type:c,kwargs:U}=gt(m,L,n,l),E=c;if(c==="openai"||c==="openai.azure"){let f=w.api_type;E=`${c}:${f}`}w.name.startsWith("gemini")?E="google":w.name.startsWith("claude")&&(E="anthropic");let j=_t(E,I),{function_name:y,stream_function:v}=j,z=Wt[c];if(!z)throw new Error(`No request function found for provider: ${c}`);let W=f=>{let V=new Date().toISOString();return mt(this.baseURL,P({function_name:y,provider_type:c,args:[],kwargs:U,tags:a,request_start_time:p,request_end_time:V,api_key:this.apiKey,metadata:s,prompt_id:m.id,prompt_version:m.version,prompt_input_variables:D,group_id:u,return_prompt_blueprint:!0,span_id:g.spanContext().spanId},f),this.throwOnError)},A;try{A=yield z(m,U)}catch(f){let V=It(f),vt=f instanceof Error?f.message:String(f);throw yield W({request_response:{},status:"ERROR",error_type:V,error_message:vt}),f}if(l)return X(A,W,v,s||m.metadata);let H=yield W({request_response:A}),Y={request_id:H.request_id,raw_response:A,prompt_blueprint:H.prompt_blueprint};return g.setAttribute("function_output",JSON.stringify(Y)),Y}catch(_){throw g.setStatus({code:Ut.SpanStatusCode.ERROR,message:_ instanceof Error?_.message:"Unknown error"}),_}finally{g.end()}}))})}runWorkflow(u){return R(this,arguments,function*({workflowName:t,inputVariables:r={},metadata:e={},workflowLabelName:i=null,workflowVersion:a=null,returnAllOutputs:s=!1}){try{let n=yield ct({workflow_name:t,input_variables:r,metadata:e,workflow_label_name:i,workflow_version_number:a,return_all_outputs:s,api_key:this.apiKey,baseURL:this.baseURL});if(!s&&Vt(n)){let d=Object.values(n).filter(O=>O.is_output_node===!0);if(d.length===0)throw new Error(JSON.stringify(n,null,2));if(!d.some(O=>O.status==="SUCCESS"))throw new Error(JSON.stringify(n,null,2))}return n}catch(n){throw n instanceof Error?(console.error("Error running workflow:",n.message),new Error(`Error running workflow: ${n.message}`)):(console.error("Unknown error running workflow:",n),new Error("Unknown error running workflow"))}})}logRequest(t){return R(this,null,function*(){return dt(this.apiKey,this.baseURL,t,this.throwOnError)})}};export{Lt as PromptLayer};
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{E,a as g,d,f as T,g as
|
|
2
|
-
`):void 0}return String(e)}}var $=e=>Array.isArray(e)?e.map(t=>{if(!p(t))return null;let n={};t.role!==void 0&&(n.role=String(t.role));let r=y(t.content);r&&(n.content=r);let o=Y(t.tool_calls);return o.length>0&&(n.tool_calls=o),t.tool_call_id&&(n.tool_call_id=String(t.tool_call_id)),Object.keys(n).length>0?n:null}).filter(t=>t!==null):[],J=e=>{let t={},n=e.role,r=y(e.content),o=Y(e.tool_calls);return n!=null?t.role=String(n):(r||o.length>0)&&(t.role="assistant"),r&&(t.content=r),o.length>0&&(t.tool_calls=o),e.tool_call_id&&(t.tool_call_id=String(e.tool_call_id)),Object.keys(t).length>0?t:null},it=new Set(["function_call","computer_call","shell_call","apply_patch_call","custom_tool_call","mcp_call"]),ct=new Set(["function_call_output","function_call_result","computer_call_output","computer_call_result","shell_call_output","apply_patch_call_output","custom_tool_call_output"]),v=e=>typeof e=="string"?[{role:"user",content:e}]:Array.isArray(e)?e.flatMap(t=>{if(!p(t))return[];if(t.type==="message_output_item"&&p(t.rawItem)){let r=J(t.rawItem);return r?[r]:[]}if(t.type==="tool_call_item"&&p(t.rawItem)){let r=K(t.rawItem);return r?[r]:[]}if(t.type==="tool_call_output_item"&&p(t.rawItem)){let r=B(t.rawItem,t.output);return r?[r]:[]}if(typeof t.type=="string"&&it.has(t.type)){let r=K(t);return r?[r]:[]}if(typeof t.type=="string"&&ct.has(t.type)){let r=B(t);return r?[r]:[]}let n=J(t);return n?[n]:[]}).filter(t=>t!==null):[],Z=(e,t)=>{var n,r;p(t)&&(F(e,"gen_ai.usage.input_tokens",(n=t.input_tokens)!=null?n:t.prompt_tokens),F(e,"gen_ai.usage.output_tokens",(r=t.output_tokens)!=null?r:t.completion_tokens))},pt=(e,t)=>{let n={"gen_ai.provider.name":"openai.responses"};return l(n,"gen_ai.request.model",e.model),Z(n,e.usage),b("gen_ai.prompt",$(e.input),n),b("gen_ai.completion",$(e.output),n),m(n,"openai_agents.model_config_json",e.model_config,t),m(n,"openai_agents.generation.raw_input_json",e.input,t),m(n,"openai_agents.generation.raw_output_json",e.output,t),n},ut=(e,t)=>{var a,s,i;let n={"gen_ai.provider.name":"openai.responses"},r=p(e._response)?e._response:{},o=p(r.usage)?r.usage:void 0;return l(n,"gen_ai.request.model",r.model),l(n,"gen_ai.response.model",r.model),l(n,"gen_ai.response.id",(s=(a=e.response_id)!=null?a:r.id)!=null?s:r.response_id),Z(n,o),b("gen_ai.prompt",v((i=e._input)!=null?i:r.input),n),b("gen_ai.completion",v(r.output),n),m(n,"openai_agents.response.raw_json",r,t),l(n,"openai_agents.response.object",r.object),n},lt=(e,t)=>{let n={node_type:"CODE_EXECUTION",tool_name:e.name,"openai_agents.function.name":e.name};return l(n,"function_input",e.input),l(n,"function_output",e.output),l(n,"openai_agents.function.input",e.input),l(n,"openai_agents.function.output",e.output),m(n,"openai_agents.function.mcp_data_json",e.mcp_data,t),n},dt=(e,t)=>{let n={"openai_agents.agent.name":e.name};return l(n,"openai_agents.agent.output_type",e.output_type),m(n,"openai_agents.agent.handoffs_json",e.handoffs,t),m(n,"openai_agents.agent.tools_json",e.tools,t),n},gt=e=>{let t={};return l(t,"openai_agents.handoff.from_agent",e.from_agent),l(t,"openai_agents.handoff.to_agent",e.to_agent),t},mt=e=>({"openai_agents.guardrail.name":e.name,"openai_agents.guardrail.triggered":e.triggered}),ft=(e,t)=>{let n={"openai_agents.custom.name":e.name};return m(n,"openai_agents.custom.data_json",e.data,t),n},_t=(e,t)=>t?{"openai_agents.raw_json":_(e)}:{},H=()=>T,P=e=>e.spanData.type==="generation"||e.spanData.type==="response"?ot:rt,w=e=>{switch(e.spanData.type){case"function":return`Function: ${e.spanData.name}`;case"agent":return`Agent: ${e.spanData.name}`;case"guardrail":return`Guardrail: ${e.spanData.name}`;case"custom":return String(e.spanData.name);default:return e.spanData.type.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}},k=(e,t)=>{let n={"promptlayer.telemetry.source":"openai-agents-js","promptlayer.telemetry.source_version":H(),"openai_agents.trace_id_original":e.traceId,"openai_agents.workflow_name":e.name};return e.groupId&&(n["openai_agents.group_id"]=e.groupId),p(e.metadata)&&(Object.entries(e.metadata).forEach(([r,o])=>{D(o)&&(n[`openai_agents.metadata.${at(r)}`]=o)}),m(n,"openai_agents.metadata_json",e.metadata,t)),n},U=e=>{let t={"promptlayer.telemetry.source":"openai-agents-js","promptlayer.telemetry.source_version":H(),"openai_agents.span_id_original":e.spanId,"openai_agents.span_type":e.spanData.type};return e.parentId&&(t["openai_agents.parent_id_original"]=e.parentId),t},W=(e,t)=>{switch(e.type){case"generation":return pt(e,t);case"response":return ut(e,t);case"function":return lt(e,t);case"agent":return dt(e,t);case"handoff":return gt(e);case"guardrail":return mt(e);case"custom":return ft(e,t);default:return _t(e,t)}},h=0,X=1,q=2;var L=e=>typeof e=="string"?{stringValue:e}:typeof e=="boolean"?{boolValue:e}:typeof e=="number"?Number.isInteger(e)?{intValue:String(e)}:{doubleValue:e}:e===null?{stringValue:"null"}:Array.isArray(e)?{arrayValue:{values:e.map(t=>L(t))}}:{kvlistValue:{values:Object.entries(e).map(([t,n])=>({key:t,value:L(n)}))}},M=e=>Object.entries(e).map(([t,n])=>({key:t,value:L(n)})),G=(e,{serviceName:t="promptlayer-openai-agents-js",scopeName:n="promptlayer.integrations.openai_agents",scopeVersion:r=T}={})=>({resourceSpans:[{resource:{attributes:M({"service.name":t})},scopeSpans:[{scope:{name:n,version:r},spans:e.map(o=>{var s,i;let a={traceId:o.traceId,spanId:o.spanId,name:o.name,kind:o.kind,startTimeUnixNano:o.startTimeUnixNano,endTimeUnixNano:(s=o.endTimeUnixNano)!=null?s:o.startTimeUnixNano,attributes:M(o.attributes),events:((i=o.events)!=null?i:[]).map(c=>{var u;return{name:c.name,timeUnixNano:c.timeUnixNano,attributes:M((u=c.attributes)!=null?u:{})}}),links:[]};return o.parentSpanId&&(a.parentSpanId=o.parentSpanId),o.traceState&&(a.traceState=o.traceState),o.status&&(a.status=g({code:o.status.code},o.status.message?{message:o.status.message}:{})),a})}]}]});import{createHash as yt}from"crypto";var St=/^[0-9a-f]{32}$/i,j=e=>yt("sha256").update(e,"utf8").digest("hex"),x=e=>{let t=e.startsWith("trace_")?e.slice(6):e;return St.test(t)?t.toLowerCase():j(e).slice(0,32)},N=e=>j(e).slice(0,16),z=e=>j(`${e}:root`).slice(0,16);var At=/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})(?:\.(\d{1,9}))?(Z|[+-]\d{2}:\d{2})?$/,f=()=>(BigInt(Date.now())*BigInt(1e6)).toString(),A=e=>{if(!e)return;let t=At.exec(e);if(!t){let i=Date.parse(e);return Number.isNaN(i)?void 0:(BigInt(i)*BigInt(1e6)).toString()}let[,n,r="",o="Z"]=t,a=Date.parse(`${n}${o}`);if(Number.isNaN(a))return;let s=BigInt((r+"000000000").slice(0,9));return(BigInt(a)*BigInt(1e6)+s).toString()},tt=(...e)=>{let t=e.filter(n=>n!==void 0);return t.length===0?f():t.reduce((n,r)=>BigInt(r)<BigInt(n)?r:n)},et=(...e)=>{let t=e.filter(n=>n!==void 0);return t.length===0?f():t.reduce((n,r)=>BigInt(r)>BigInt(n)?r:n)};var O=e=>{let t=e.length;for(;t>0&&e.charCodeAt(t-1)===47;)t-=1;return e.slice(0,t)};var It=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i,Tt="0".repeat(32),bt="0".repeat(16),I=class{constructor({apiKey:t,baseURL:n,includeRawPayloads:r=!0}){this.traceStates=new Map;this.completedTraceQueue=new Map;this.pendingExports=new Map;this.apiKey=t,this.baseURL=O(n),this.includeRawPayloads=r}start(){}onTraceStart(t){return d(this,null,function*(){var o;if(this.traceStates.has(t.traceId))return;let n=this.resolveUpstreamTraceContext(t.metadata),r=(o=n==null?void 0:n.traceId)!=null?o:x(t.traceId);this.traceStates.set(t.traceId,{rootSpan:{traceId:r,spanId:z(t.traceId),name:t.name||"OpenAI Agents Trace",kind:1,startTimeUnixNano:f(),parentSpanId:n==null?void 0:n.parentSpanId,traceState:n==null?void 0:n.traceState,attributes:k(t,this.includeRawPayloads),status:{code:h},events:[]},spans:new Map})})}onTraceEnd(t){return d(this,null,function*(){let n=this.traceStates.get(t.traceId);if(!n)return;let r=Array.from(n.spans.values()).sort((c,u)=>BigInt(c.startTimeUnixNano)<BigInt(u.startTimeUnixNano)?-1:1),o=r.map(c=>c.startTimeUnixNano),a=r.map(c=>{var u;return(u=c.endTimeUnixNano)!=null?u:c.startTimeUnixNano}),s=et(f(),...a);n.rootSpan.startTimeUnixNano=tt(n.rootSpan.startTimeUnixNano,...o),n.rootSpan.endTimeUnixNano=s;let i=G([n.rootSpan,...r]);this.traceStates.delete(t.traceId),this.completedTraceQueue.set(t.traceId,i),this.startExportForTrace(t.traceId)})}onSpanStart(t){return d(this,null,function*(){var a;let n=this.ensureTraceStateForSpan(t),r=n.spans.get(t.spanId),o=r!=null?r:this.createSpanRecord(t,n.rootSpan.spanId);o.traceId=n.rootSpan.traceId,o.traceState=n.rootSpan.traceState,o.name=w(t),o.kind=P(t),o.startTimeUnixNano=(a=A(t.startedAt))!=null?a:o.startTimeUnixNano,o.parentSpanId=t.parentId?N(t.parentId):n.rootSpan.spanId,o.attributes=g(g({},o.attributes),U(t)),n.spans.set(t.spanId,o)})}onSpanEnd(t){return d(this,null,function*(){var o,a,s,i;let n=this.ensureTraceStateForSpan(t),r=(o=n.spans.get(t.spanId))!=null?o:this.createSpanRecord(t,n.rootSpan.spanId);r.attributes=g(g({},r.attributes),W(t.spanData,this.includeRawPayloads)),r.endTimeUnixNano=(s=(a=A(t.endedAt))!=null?a:r.endTimeUnixNano)!=null?s:f(),r.status=this.statusForSpan(t),t.error&&(r.events=[...(i=r.events)!=null?i:[],{name:"exception",timeUnixNano:r.endTimeUnixNano,attributes:{"exception.type":"OpenAIAgentsError","exception.message":t.error.message,"openai_agents.error_json":JSON.stringify(t.error)}}]),n.spans.set(t.spanId,r)})}shutdown(){return d(this,null,function*(){yield this.forceFlush()})}forceFlush(){return d(this,null,function*(){for(let t=0;t<2;t+=1){for(let n of this.completedTraceQueue.keys())this.startExportForTrace(n);if(this.pendingExports.size===0||(yield Promise.all(Array.from(this.pendingExports.values())),this.completedTraceQueue.size===0))return}})}traceLikeFromSpan(t){var o,a,s,i,c;let n=this.asRecord(t.traceMetadata),r=this.asRecord(n==null?void 0:n.metadata);return{traceId:t.traceId,name:(a=(o=this.readString(n==null?void 0:n.workflow_name))!=null?o:this.readString(n==null?void 0:n.workflowName))!=null?a:"OpenAI Agents Trace",groupId:(i=(s=this.readString(n==null?void 0:n.group_id))!=null?s:this.readString(n==null?void 0:n.groupId))!=null?i:null,metadata:(c=r!=null?r:n)!=null?c:{}}}ensureTraceStateForSpan(t){var i,c;let n=this.traceStates.get(t.traceId);if(n)return n;let r=this.traceLikeFromSpan(t),o=this.resolveUpstreamTraceContext(r.metadata),s={rootSpan:{traceId:(i=o==null?void 0:o.traceId)!=null?i:x(t.traceId),spanId:z(t.traceId),name:r.name,kind:1,startTimeUnixNano:(c=A(t.startedAt))!=null?c:f(),parentSpanId:o==null?void 0:o.parentSpanId,traceState:o==null?void 0:o.traceState,attributes:k(r,this.includeRawPayloads),status:{code:h},events:[]},spans:new Map};return this.traceStates.set(t.traceId,s),s}createSpanRecord(t,n){var r,o,a,s;return{traceId:(o=(r=this.traceStates.get(t.traceId))==null?void 0:r.rootSpan.traceId)!=null?o:x(t.traceId),spanId:N(t.spanId),parentSpanId:t.parentId?N(t.parentId):n,name:w(t),kind:P(t),startTimeUnixNano:(a=A(t.startedAt))!=null?a:f(),traceState:(s=this.traceStates.get(t.traceId))==null?void 0:s.rootSpan.traceState,attributes:g({},U(t)),status:{code:h},events:[]}}statusForSpan(t){return t.error?{code:q,message:t.error.message}:{code:X}}exportPayload(t){return d(this,null,function*(){let n=yield V(`${this.baseURL}/v1/traces`,{method:"POST",headers:g({"Content-Type":"application/json","X-API-KEY":this.apiKey,"X-PromptLayer-Integration":"openai-agents-js"},C()),body:JSON.stringify(t)});if(!n.ok)throw new Error(`Failed to export OpenAI Agents traces: ${n.status} ${n.statusText}`)})}startExportForTrace(t){if(this.pendingExports.has(t))return;let n=this.completedTraceQueue.get(t);if(!n)return;let r=this.exportPayload(n).then(()=>{this.completedTraceQueue.delete(t)}).catch(o=>{console.error(`Failed to export OpenAI Agents trace '${t}'.`,o)}).finally(()=>{this.pendingExports.delete(t)});this.pendingExports.set(t,r)}resolveUpstreamTraceContext(t){let n=this.asRecord(t);if(!n)return null;let r=n.traceparent;if(typeof r!="string"||!r.trim())return null;let o=r.trim().match(It);if(!o)return null;let[,a,s,i]=o,c=a.toLowerCase(),u=s.toLowerCase(),R=i.toLowerCase();if(c==="ff"||u===Tt||R===bt)return null;let nt=typeof n.tracestate=="string"&&n.tracestate.trim()?n.tracestate.trim():void 0;return{traceId:u,parentSpanId:R,traceState:nt}}asRecord(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}readString(t){return typeof t=="string"&&t.trim()?t:void 0}};var ht=e=>{var t;return O((t=e!=null?e:E("PROMPTLAYER_BASE_URL"))!=null?t:"https://api.promptlayer.com")},xt=(...o)=>d(null,[...o],function*({apiKey:e=E("PROMPTLAYER_API_KEY"),baseURL:t,exclusive:n=!0,includeRawPayloads:r=!0}={}){if(!e)throw new Error("PromptLayer API key not provided. Please set PROMPTLAYER_API_KEY or pass apiKey.");let a=yield import("@openai/agents"),s=new I({apiKey:e,baseURL:ht(t),includeRawPayloads:r});return n?a.setTraceProcessors([s]):a.addTraceProcessor(s),s});export{I as PromptLayerOpenAIAgentsProcessor,xt as instrumentOpenAIAgents};
|
|
1
|
+
import{E as V,F,a as g,d,f as T,g as L,h as C}from"./chunk-DFBRFJOL.js";var ot=1,at=3,p=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Q=e=>typeof e=="string"||typeof e=="number"||typeof e=="boolean",st=e=>e.replace(/[^a-zA-Z0-9_.-]/g,"_"),S=e=>e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"?e:Array.isArray(e)?e.map(t=>S(t)):p(e)?Object.fromEntries(Object.entries(e).map(([t,n])=>[t,S(n)])):String(e),_=e=>{let t=n=>Array.isArray(n)?n.map(r=>t(r)):p(n)?Object.keys(n).sort().reduce((r,o)=>(r[o]=t(n[o]),r),{}):n;return JSON.stringify(t(S(e)))},l=(e,t,n)=>{n!=null&&n!==""&&(e[t]=String(n))},K=(e,t,n)=>{if(n!=null&&n!==""){let r=Number(n);Number.isNaN(r)||(e[t]=r)}},m=(e,t,n,r)=>{r&&n!==void 0&&n!==null&&(e[t]=_(n))},b=(e,t,n)=>{t.forEach((r,o)=>{Object.entries(r).forEach(([a,s])=>{n[`${e}.${o}.${a}`]=Q(s)?s:_(s)})})},Z=e=>Array.isArray(e)?e.map(t=>{var a,s,i,c,u;if(!p(t))return null;let n=p(t.function)?t.function:null,r=(s=(a=n==null?void 0:n.name)!=null?a:t.name)!=null?s:"tool",o=(c=(i=n==null?void 0:n.arguments)!=null?i:t.arguments)!=null?c:{};if(typeof o=="string")try{o=JSON.parse(o)}catch(R){o=o}return{id:String((u=t.id)!=null?u:""),type:"tool_call",name:String(r),arguments:S(o)}}).filter(t=>t!==null):[],H=e=>{var n,r;let t=(r=(n=e.call_id)!=null?n:e.callId)!=null?r:e.id;return t!=null?String(t):void 0},it=e=>{if(e==null)return;if(typeof e=="string")return e;if(Array.isArray(e)){let n=y(e);return n!=null?n:_(e)}if(p(e)){let n=y([e]);return n!=null?n:_(e)}let t=y(e);return t!==void 0?t:_(e)},B=e=>{var n,r,o;let t=(n=e.arguments)!=null?n:{};if(typeof t=="string")try{t=JSON.parse(t)}catch(a){t=t}return{role:"assistant",tool_calls:[{id:(r=H(e))!=null?r:"",type:"tool_call",name:String((o=e.name)!=null?o:"tool"),arguments:S(t)}]}},$=(e,t)=>{var a;let n=H(e),r=it((a=t!=null?t:e.output)!=null?a:e.content);if(!n&&!r)return null;let o={role:"tool"};return n&&(o.tool_call_id=n),r!==void 0&&(o.content=r),o};function y(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.map(n=>{var o;if(!p(n))return null;let r=n.type;if(r==="text"||r==="input_text"||r==="output_text"){let a=(o=n.text)!=null?o:n.content;return a!=null?String(a):null}return null}).filter(n=>n!==null);return t.length>0?t.join(`
|
|
2
|
+
`):void 0}return String(e)}}var J=e=>Array.isArray(e)?e.map(t=>{if(!p(t))return null;let n={};t.role!==void 0&&(n.role=String(t.role));let r=y(t.content);r&&(n.content=r);let o=Z(t.tool_calls);return o.length>0&&(n.tool_calls=o),t.tool_call_id&&(n.tool_call_id=String(t.tool_call_id)),Object.keys(n).length>0?n:null}).filter(t=>t!==null):[],v=e=>{let t={},n=e.role,r=y(e.content),o=Z(e.tool_calls);return n!=null?t.role=String(n):(r||o.length>0)&&(t.role="assistant"),r&&(t.content=r),o.length>0&&(t.tool_calls=o),e.tool_call_id&&(t.tool_call_id=String(e.tool_call_id)),Object.keys(t).length>0?t:null},ct=new Set(["function_call","computer_call","shell_call","apply_patch_call","custom_tool_call","mcp_call"]),pt=new Set(["function_call_output","function_call_result","computer_call_output","computer_call_result","shell_call_output","apply_patch_call_output","custom_tool_call_output"]),D=e=>typeof e=="string"?[{role:"user",content:e}]:Array.isArray(e)?e.flatMap(t=>{if(!p(t))return[];if(t.type==="message_output_item"&&p(t.rawItem)){let r=v(t.rawItem);return r?[r]:[]}if(t.type==="tool_call_item"&&p(t.rawItem)){let r=B(t.rawItem);return r?[r]:[]}if(t.type==="tool_call_output_item"&&p(t.rawItem)){let r=$(t.rawItem,t.output);return r?[r]:[]}if(typeof t.type=="string"&&ct.has(t.type)){let r=B(t);return r?[r]:[]}if(typeof t.type=="string"&&pt.has(t.type)){let r=$(t);return r?[r]:[]}let n=v(t);return n?[n]:[]}).filter(t=>t!==null):[],W=(e,t)=>{var n,r;p(t)&&(K(e,"gen_ai.usage.input_tokens",(n=t.input_tokens)!=null?n:t.prompt_tokens),K(e,"gen_ai.usage.output_tokens",(r=t.output_tokens)!=null?r:t.completion_tokens))},ut=(e,t)=>{let n={"gen_ai.provider.name":"openai.responses"};return l(n,"gen_ai.request.model",e.model),W(n,e.usage),b("gen_ai.prompt",J(e.input),n),b("gen_ai.completion",J(e.output),n),m(n,"openai_agents.model_config_json",e.model_config,t),m(n,"openai_agents.generation.raw_input_json",e.input,t),m(n,"openai_agents.generation.raw_output_json",e.output,t),n},lt=(e,t)=>{var a,s,i;let n={"gen_ai.provider.name":"openai.responses"},r=p(e._response)?e._response:{},o=p(r.usage)?r.usage:void 0;return l(n,"gen_ai.request.model",r.model),l(n,"gen_ai.response.model",r.model),l(n,"gen_ai.response.id",(s=(a=e.response_id)!=null?a:r.id)!=null?s:r.response_id),W(n,o),b("gen_ai.prompt",D((i=e._input)!=null?i:r.input),n),b("gen_ai.completion",D(r.output),n),m(n,"openai_agents.response.raw_json",r,t),l(n,"openai_agents.response.object",r.object),n},dt=(e,t)=>{let n={node_type:"CODE_EXECUTION",tool_name:e.name,"openai_agents.function.name":e.name};return l(n,"function_input",e.input),l(n,"function_output",e.output),l(n,"openai_agents.function.input",e.input),l(n,"openai_agents.function.output",e.output),m(n,"openai_agents.function.mcp_data_json",e.mcp_data,t),n},gt=(e,t)=>{let n={"openai_agents.agent.name":e.name};return l(n,"openai_agents.agent.output_type",e.output_type),m(n,"openai_agents.agent.handoffs_json",e.handoffs,t),m(n,"openai_agents.agent.tools_json",e.tools,t),n},mt=e=>{let t={};return l(t,"openai_agents.handoff.from_agent",e.from_agent),l(t,"openai_agents.handoff.to_agent",e.to_agent),t},ft=e=>({"openai_agents.guardrail.name":e.name,"openai_agents.guardrail.triggered":e.triggered}),_t=(e,t)=>{let n={"openai_agents.custom.name":e.name};return m(n,"openai_agents.custom.data_json",e.data,t),n},yt=(e,t)=>t?{"openai_agents.raw_json":_(e)}:{},X=()=>T,E=e=>e.spanData.type==="generation"||e.spanData.type==="response"?at:ot,P=e=>{switch(e.spanData.type){case"function":return`Function: ${e.spanData.name}`;case"agent":return`Agent: ${e.spanData.name}`;case"guardrail":return`Guardrail: ${e.spanData.name}`;case"custom":return String(e.spanData.name);default:return e.spanData.type.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}},w=(e,t)=>{let n={"promptlayer.telemetry.source":"openai-agents-js","promptlayer.telemetry.source_version":X(),"openai_agents.trace_id_original":e.traceId,"openai_agents.workflow_name":e.name};return e.groupId&&(n["openai_agents.group_id"]=e.groupId),p(e.metadata)&&(Object.entries(e.metadata).forEach(([r,o])=>{Q(o)&&(n[`openai_agents.metadata.${st(r)}`]=o)}),m(n,"openai_agents.metadata_json",e.metadata,t)),n},k=e=>{let t={"promptlayer.telemetry.source":"openai-agents-js","promptlayer.telemetry.source_version":X(),"openai_agents.span_id_original":e.spanId,"openai_agents.span_type":e.spanData.type};return e.parentId&&(t["openai_agents.parent_id_original"]=e.parentId),t},Y=(e,t)=>{switch(e.type){case"generation":return ut(e,t);case"response":return lt(e,t);case"function":return dt(e,t);case"agent":return gt(e,t);case"handoff":return mt(e);case"guardrail":return ft(e);case"custom":return _t(e,t);default:return yt(e,t)}},h=0,q=1,G=2;var M=e=>typeof e=="string"?{stringValue:e}:typeof e=="boolean"?{boolValue:e}:typeof e=="number"?Number.isInteger(e)?{intValue:String(e)}:{doubleValue:e}:e===null?{stringValue:"null"}:Array.isArray(e)?{arrayValue:{values:e.map(t=>M(t))}}:{kvlistValue:{values:Object.entries(e).map(([t,n])=>({key:t,value:M(n)}))}},U=e=>Object.entries(e).map(([t,n])=>({key:t,value:M(n)})),tt=(e,{serviceName:t="promptlayer-openai-agents-js",scopeName:n="promptlayer.integrations.openai_agents",scopeVersion:r=T}={})=>({resourceSpans:[{resource:{attributes:U({"service.name":t})},scopeSpans:[{scope:{name:n,version:r},spans:e.map(o=>{var s,i;let a={traceId:o.traceId,spanId:o.spanId,name:o.name,kind:o.kind,startTimeUnixNano:o.startTimeUnixNano,endTimeUnixNano:(s=o.endTimeUnixNano)!=null?s:o.startTimeUnixNano,attributes:U(o.attributes),events:((i=o.events)!=null?i:[]).map(c=>{var u;return{name:c.name,timeUnixNano:c.timeUnixNano,attributes:U((u=c.attributes)!=null?u:{})}}),links:[]};return o.parentSpanId&&(a.parentSpanId=o.parentSpanId),o.traceState&&(a.traceState=o.traceState),o.status&&(a.status=g({code:o.status.code},o.status.message?{message:o.status.message}:{})),a})}]}]});import{createHash as St}from"crypto";var At=/^[0-9a-f]{32}$/i,j=e=>St("sha256").update(e,"utf8").digest("hex"),x=e=>{let t=e.startsWith("trace_")?e.slice(6):e;return At.test(t)?t.toLowerCase():j(e).slice(0,32)},N=e=>j(e).slice(0,16),z=e=>j(`${e}:root`).slice(0,16);var It=/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})(?:\.(\d{1,9}))?(Z|[+-]\d{2}:\d{2})?$/,f=()=>(BigInt(Date.now())*BigInt(1e6)).toString(),A=e=>{if(!e)return;let t=It.exec(e);if(!t){let i=Date.parse(e);return Number.isNaN(i)?void 0:(BigInt(i)*BigInt(1e6)).toString()}let[,n,r="",o="Z"]=t,a=Date.parse(`${n}${o}`);if(Number.isNaN(a))return;let s=BigInt((r+"000000000").slice(0,9));return(BigInt(a)*BigInt(1e6)+s).toString()},et=(...e)=>{let t=e.filter(n=>n!==void 0);return t.length===0?f():t.reduce((n,r)=>BigInt(r)<BigInt(n)?r:n)},nt=(...e)=>{let t=e.filter(n=>n!==void 0);return t.length===0?f():t.reduce((n,r)=>BigInt(r)>BigInt(n)?r:n)};var O=e=>{let t=e.length;for(;t>0&&e.charCodeAt(t-1)===47;)t-=1;return e.slice(0,t)};var Tt=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i,bt="0".repeat(32),ht="0".repeat(16),I=class{constructor({apiKey:t,baseURL:n,includeRawPayloads:r=!0}){this.traceStates=new Map;this.completedTraceQueue=new Map;this.pendingExports=new Map;this.apiKey=t,this.baseURL=O(n),this.includeRawPayloads=r}start(){}onTraceStart(t){return d(this,null,function*(){var o;if(this.traceStates.has(t.traceId))return;let n=this.resolveUpstreamTraceContext(t.metadata),r=(o=n==null?void 0:n.traceId)!=null?o:x(t.traceId);this.traceStates.set(t.traceId,{rootSpan:{traceId:r,spanId:z(t.traceId),name:t.name||"OpenAI Agents Trace",kind:1,startTimeUnixNano:f(),parentSpanId:n==null?void 0:n.parentSpanId,traceState:n==null?void 0:n.traceState,attributes:w(t,this.includeRawPayloads),status:{code:h},events:[]},spans:new Map})})}onTraceEnd(t){return d(this,null,function*(){let n=this.traceStates.get(t.traceId);if(!n)return;let r=Array.from(n.spans.values()).sort((c,u)=>BigInt(c.startTimeUnixNano)<BigInt(u.startTimeUnixNano)?-1:1),o=r.map(c=>c.startTimeUnixNano),a=r.map(c=>{var u;return(u=c.endTimeUnixNano)!=null?u:c.startTimeUnixNano}),s=nt(f(),...a);n.rootSpan.startTimeUnixNano=et(n.rootSpan.startTimeUnixNano,...o),n.rootSpan.endTimeUnixNano=s;let i=tt([n.rootSpan,...r]);this.traceStates.delete(t.traceId),this.completedTraceQueue.set(t.traceId,i),this.startExportForTrace(t.traceId)})}onSpanStart(t){return d(this,null,function*(){var a;let n=this.ensureTraceStateForSpan(t),r=n.spans.get(t.spanId),o=r!=null?r:this.createSpanRecord(t,n.rootSpan.spanId);o.traceId=n.rootSpan.traceId,o.traceState=n.rootSpan.traceState,o.name=P(t),o.kind=E(t),o.startTimeUnixNano=(a=A(t.startedAt))!=null?a:o.startTimeUnixNano,o.parentSpanId=t.parentId?N(t.parentId):n.rootSpan.spanId,o.attributes=g(g({},o.attributes),k(t)),n.spans.set(t.spanId,o)})}onSpanEnd(t){return d(this,null,function*(){var o,a,s,i;let n=this.ensureTraceStateForSpan(t),r=(o=n.spans.get(t.spanId))!=null?o:this.createSpanRecord(t,n.rootSpan.spanId);r.attributes=g(g({},r.attributes),Y(t.spanData,this.includeRawPayloads)),r.endTimeUnixNano=(s=(a=A(t.endedAt))!=null?a:r.endTimeUnixNano)!=null?s:f(),r.status=this.statusForSpan(t),t.error&&(r.events=[...(i=r.events)!=null?i:[],{name:"exception",timeUnixNano:r.endTimeUnixNano,attributes:{"exception.type":"OpenAIAgentsError","exception.message":t.error.message,"openai_agents.error_json":JSON.stringify(t.error)}}]),n.spans.set(t.spanId,r)})}shutdown(){return d(this,null,function*(){yield this.forceFlush()})}forceFlush(){return d(this,null,function*(){for(let t=0;t<2;t+=1){for(let n of this.completedTraceQueue.keys())this.startExportForTrace(n);if(this.pendingExports.size===0||(yield Promise.all(Array.from(this.pendingExports.values())),this.completedTraceQueue.size===0))return}})}traceLikeFromSpan(t){var o,a,s,i,c;let n=this.asRecord(t.traceMetadata),r=this.asRecord(n==null?void 0:n.metadata);return{traceId:t.traceId,name:(a=(o=this.readString(n==null?void 0:n.workflow_name))!=null?o:this.readString(n==null?void 0:n.workflowName))!=null?a:"OpenAI Agents Trace",groupId:(i=(s=this.readString(n==null?void 0:n.group_id))!=null?s:this.readString(n==null?void 0:n.groupId))!=null?i:null,metadata:(c=r!=null?r:n)!=null?c:{}}}ensureTraceStateForSpan(t){var i,c;let n=this.traceStates.get(t.traceId);if(n)return n;let r=this.traceLikeFromSpan(t),o=this.resolveUpstreamTraceContext(r.metadata),s={rootSpan:{traceId:(i=o==null?void 0:o.traceId)!=null?i:x(t.traceId),spanId:z(t.traceId),name:r.name,kind:1,startTimeUnixNano:(c=A(t.startedAt))!=null?c:f(),parentSpanId:o==null?void 0:o.parentSpanId,traceState:o==null?void 0:o.traceState,attributes:w(r,this.includeRawPayloads),status:{code:h},events:[]},spans:new Map};return this.traceStates.set(t.traceId,s),s}createSpanRecord(t,n){var r,o,a,s;return{traceId:(o=(r=this.traceStates.get(t.traceId))==null?void 0:r.rootSpan.traceId)!=null?o:x(t.traceId),spanId:N(t.spanId),parentSpanId:t.parentId?N(t.parentId):n,name:P(t),kind:E(t),startTimeUnixNano:(a=A(t.startedAt))!=null?a:f(),traceState:(s=this.traceStates.get(t.traceId))==null?void 0:s.rootSpan.traceState,attributes:g({},k(t)),status:{code:h},events:[]}}statusForSpan(t){return t.error?{code:G,message:t.error.message}:{code:q}}exportPayload(t){return d(this,null,function*(){let n=yield C(`${this.baseURL}/v1/traces`,{method:"POST",headers:g({"Content-Type":"application/json","X-API-KEY":this.apiKey,"X-PromptLayer-Integration":"openai-agents-js"},L()),body:JSON.stringify(t)});if(!n.ok)throw new Error(`Failed to export OpenAI Agents traces: ${n.status} ${n.statusText}`)})}startExportForTrace(t){if(this.pendingExports.has(t))return;let n=this.completedTraceQueue.get(t);if(!n)return;let r=this.exportPayload(n).then(()=>{this.completedTraceQueue.delete(t)}).catch(o=>{console.error(`Failed to export OpenAI Agents trace '${t}'.`,o)}).finally(()=>{this.pendingExports.delete(t)});this.pendingExports.set(t,r)}resolveUpstreamTraceContext(t){let n=this.asRecord(t);if(!n)return null;let r=n.traceparent;if(typeof r!="string"||!r.trim())return null;let o=r.trim().match(Tt);if(!o)return null;let[,a,s,i]=o,c=a.toLowerCase(),u=s.toLowerCase(),R=i.toLowerCase();if(c==="ff"||u===bt||R===ht)return null;let rt=typeof n.tracestate=="string"&&n.tracestate.trim()?n.tracestate.trim():void 0;return{traceId:u,parentSpanId:R,traceState:rt}}asRecord(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}readString(t){return typeof t=="string"&&t.trim()?t:void 0}};var xt=e=>{var t;return O((t=e!=null?e:V("PROMPTLAYER_BASE_URL"))!=null?t:"https://api.promptlayer.com")},Nt=(...o)=>d(null,[...o],function*({apiKey:e,baseURL:t,exclusive:n=!0,includeRawPayloads:r=!0}={}){let a=F(e),s=yield import("@openai/agents"),i=new I({apiKey:a,baseURL:xt(t),includeRawPayloads:r});return n?s.setTraceProcessors([i]):s.addTraceProcessor(i),i});export{I as PromptLayerOpenAIAgentsProcessor,Nt as instrumentOpenAIAgents};
|
|
3
3
|
//# sourceMappingURL=openai-agents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/integrations/openai-agents/mapping.ts","../../src/integrations/openai-agents/otlp-json.ts","../../src/integrations/openai-agents/ids.ts","../../src/integrations/openai-agents/time.ts","../../src/integrations/openai-agents/url.ts","../../src/integrations/openai-agents/processor.ts","../../src/integrations/openai-agents/instrumentation.ts"],"sourcesContent":["import { SDK_VERSION } from \"@/utils/utils\";\nimport type {\n Span as AgentsSpan,\n SpanData,\n Trace as AgentsTrace,\n} from \"@openai/agents\";\nimport type { AttributeValue } from \"@/integrations/openai-agents/types\";\n\nconst SPAN_KIND_INTERNAL = 1;\nconst SPAN_KIND_CLIENT = 3;\n\ntype AttributeMap = Record<string, AttributeValue>;\ntype NormalizedMessage = Record<string, AttributeValue>;\ntype NormalizedToolCall = {\n id: string;\n type: \"tool_call\";\n name: string;\n arguments: AttributeValue;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst isScalar = (value: unknown): value is string | number | boolean => {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n};\n\nconst sanitizeKey = (key: string): string => {\n return key.replace(/[^a-zA-Z0-9_.-]/g, \"_\");\n};\n\nconst toJsonable = (value: unknown): AttributeValue => {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => toJsonable(item));\n }\n\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, toJsonable(item)])\n );\n }\n\n return String(value);\n};\n\nconst stableStringify = (value: unknown): string => {\n const normalize = (input: unknown): unknown => {\n if (Array.isArray(input)) {\n return input.map((item) => normalize(item));\n }\n\n if (isPlainObject(input)) {\n return Object.keys(input)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = normalize(input[key]);\n return acc;\n }, {});\n }\n\n return input;\n };\n\n return JSON.stringify(normalize(toJsonable(value)));\n};\n\nconst setStringAttr = (attrs: AttributeMap, key: string, value: unknown) => {\n if (value !== undefined && value !== null && value !== \"\") {\n attrs[key] = String(value);\n }\n};\n\nconst setNumberAttr = (attrs: AttributeMap, key: string, value: unknown) => {\n if (value !== undefined && value !== null && value !== \"\") {\n const numericValue = Number(value);\n if (!Number.isNaN(numericValue)) {\n attrs[key] = numericValue;\n }\n }\n};\n\nconst setJsonAttr = (\n attrs: AttributeMap,\n key: string,\n value: unknown,\n includeRawPayloads: boolean\n) => {\n if (includeRawPayloads && value !== undefined && value !== null) {\n attrs[key] = stableStringify(value);\n }\n};\n\nconst flattenIndexedMessages = (\n prefix: string,\n messages: NormalizedMessage[],\n attrs: AttributeMap\n) => {\n messages.forEach((message, index) => {\n Object.entries(message).forEach(([key, value]) => {\n attrs[`${prefix}.${index}.${key}`] = isScalar(value)\n ? value\n : stableStringify(value);\n });\n });\n};\n\nconst normalizeToolCalls = (toolCalls: unknown): NormalizedToolCall[] => {\n if (!Array.isArray(toolCalls)) {\n return [];\n }\n\n return toolCalls\n .map((call) => {\n if (!isPlainObject(call)) {\n return null;\n }\n\n const functionData = isPlainObject(call.function) ? call.function : null;\n const name = functionData?.name ?? call.name ?? \"tool\";\n let argumentsValue =\n functionData?.arguments ?? call.arguments ?? {};\n\n if (typeof argumentsValue === \"string\") {\n try {\n argumentsValue = JSON.parse(argumentsValue);\n } catch {\n argumentsValue = argumentsValue;\n }\n }\n\n return {\n id: String(call.id ?? \"\"),\n type: \"tool_call\",\n name: String(name),\n arguments: toJsonable(argumentsValue),\n };\n })\n .filter((call): call is NormalizedToolCall => call !== null);\n};\n\nconst getCallId = (item: Record<string, unknown>): string | undefined => {\n const value = item.call_id ?? item.callId ?? item.id;\n return value !== undefined && value !== null ? String(value) : undefined;\n};\n\nconst normalizeToolOutputContent = (output: unknown): string | undefined => {\n if (output === undefined || output === null) {\n return undefined;\n }\n\n if (typeof output === \"string\") {\n return output;\n }\n\n if (Array.isArray(output)) {\n const textContent = extractTextContent(output);\n return textContent ?? stableStringify(output);\n }\n\n if (isPlainObject(output)) {\n const textContent = extractTextContent([output]);\n return textContent ?? stableStringify(output);\n }\n\n const textContent = extractTextContent(output);\n if (textContent !== undefined) {\n return textContent;\n }\n\n return stableStringify(output);\n};\n\nconst normalizeToolCallMessage = (\n item: Record<string, unknown>\n): NormalizedMessage | null => {\n let argumentsValue = item.arguments ?? {};\n if (typeof argumentsValue === \"string\") {\n try {\n argumentsValue = JSON.parse(argumentsValue);\n } catch {\n argumentsValue = argumentsValue;\n }\n }\n\n return {\n role: \"assistant\",\n tool_calls: [\n {\n id: getCallId(item) ?? \"\",\n type: \"tool_call\",\n name: String(item.name ?? \"tool\"),\n arguments: toJsonable(argumentsValue),\n },\n ],\n };\n};\n\nconst normalizeToolResultMessage = (\n item: Record<string, unknown>,\n outputOverride?: unknown\n): NormalizedMessage | null => {\n const toolCallId = getCallId(item);\n const content = normalizeToolOutputContent(\n outputOverride ?? item.output ?? item.content\n );\n\n if (!toolCallId && !content) {\n return null;\n }\n\n const message: NormalizedMessage = {\n role: \"tool\",\n };\n\n if (toolCallId) {\n message.tool_call_id = toolCallId;\n }\n\n if (content !== undefined) {\n message.content = content;\n }\n\n return message;\n};\n\nfunction extractTextContent(content: unknown): string | undefined {\n if (content === undefined || content === null) {\n return undefined;\n }\n\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n const textParts = content\n .map((part) => {\n if (!isPlainObject(part)) {\n return null;\n }\n\n const partType = part.type;\n if (\n partType === \"text\" ||\n partType === \"input_text\" ||\n partType === \"output_text\"\n ) {\n const text = part.text ?? part.content;\n return text !== undefined && text !== null ? String(text) : null;\n }\n\n return null;\n })\n .filter((part): part is string => part !== null);\n\n return textParts.length > 0 ? textParts.join(\"\\n\") : undefined;\n }\n\n return String(content);\n}\n\nexport const normalizeMessages = (items: unknown): NormalizedMessage[] => {\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items\n .map((item) => {\n if (!isPlainObject(item)) {\n return null;\n }\n\n const normalized: NormalizedMessage = {};\n if (item.role !== undefined) {\n normalized.role = String(item.role);\n }\n\n const content = extractTextContent(item.content);\n if (content) {\n normalized.content = content;\n }\n\n const toolCalls = normalizeToolCalls(item.tool_calls);\n if (toolCalls.length > 0) {\n normalized.tool_calls = toolCalls;\n }\n\n if (item.tool_call_id) {\n normalized.tool_call_id = String(item.tool_call_id);\n }\n\n return Object.keys(normalized).length > 0 ? normalized : null;\n })\n .filter((message): message is NormalizedMessage => message !== null);\n};\n\nconst normalizeResponseMessage = (\n item: Record<string, unknown>\n): NormalizedMessage | null => {\n const message: NormalizedMessage = {};\n const role = item.role;\n const content = extractTextContent(item.content);\n const toolCalls = normalizeToolCalls(item.tool_calls);\n\n if (role !== undefined && role !== null) {\n message.role = String(role);\n } else if (content || toolCalls.length > 0) {\n message.role = \"assistant\";\n }\n\n if (content) {\n message.content = content;\n }\n\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n\n if (item.tool_call_id) {\n message.tool_call_id = String(item.tool_call_id);\n }\n\n return Object.keys(message).length > 0 ? message : null;\n};\n\nconst RAW_TOOL_CALL_ITEM_TYPES = new Set([\n \"function_call\",\n \"computer_call\",\n \"shell_call\",\n \"apply_patch_call\",\n \"custom_tool_call\",\n \"mcp_call\",\n]);\n\nconst RAW_TOOL_RESULT_ITEM_TYPES = new Set([\n \"function_call_output\",\n \"function_call_result\",\n \"computer_call_output\",\n \"computer_call_result\",\n \"shell_call_output\",\n \"apply_patch_call_output\",\n \"custom_tool_call_output\",\n]);\n\nexport const normalizeResponseItems = (items: unknown): NormalizedMessage[] => {\n if (typeof items === \"string\") {\n return [{ role: \"user\", content: items }];\n }\n\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items\n .flatMap((item) => {\n if (!isPlainObject(item)) {\n return [];\n }\n\n if (item.type === \"message_output_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeResponseMessage(item.rawItem);\n return message ? [message] : [];\n }\n\n if (item.type === \"tool_call_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeToolCallMessage(item.rawItem);\n return message ? [message] : [];\n }\n\n if (item.type === \"tool_call_output_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeToolResultMessage(item.rawItem, item.output);\n return message ? [message] : [];\n }\n\n if (typeof item.type === \"string\" && RAW_TOOL_CALL_ITEM_TYPES.has(item.type)) {\n const message = normalizeToolCallMessage(item);\n return message ? [message] : [];\n }\n\n if (\n typeof item.type === \"string\" &&\n RAW_TOOL_RESULT_ITEM_TYPES.has(item.type)\n ) {\n const message = normalizeToolResultMessage(item);\n return message ? [message] : [];\n }\n\n const message = normalizeResponseMessage(item);\n return message ? [message] : [];\n })\n .filter((message): message is NormalizedMessage => message !== null);\n};\n\nconst applyUsageAttributes = (attrs: AttributeMap, usage: unknown) => {\n if (!isPlainObject(usage)) {\n return;\n }\n\n setNumberAttr(\n attrs,\n \"gen_ai.usage.input_tokens\",\n usage.input_tokens ?? usage.prompt_tokens\n );\n setNumberAttr(\n attrs,\n \"gen_ai.usage.output_tokens\",\n usage.output_tokens ?? usage.completion_tokens\n );\n};\n\nconst generationAttributes = (\n spanData: Extract<SpanData, { type: \"generation\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"gen_ai.provider.name\": \"openai.responses\",\n };\n\n setStringAttr(attrs, \"gen_ai.request.model\", spanData.model);\n applyUsageAttributes(attrs, spanData.usage);\n flattenIndexedMessages(\"gen_ai.prompt\", normalizeMessages(spanData.input), attrs);\n flattenIndexedMessages(\n \"gen_ai.completion\",\n normalizeMessages(spanData.output),\n attrs\n );\n setJsonAttr(\n attrs,\n \"openai_agents.model_config_json\",\n spanData.model_config,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.generation.raw_input_json\",\n spanData.input,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.generation.raw_output_json\",\n spanData.output,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst responseAttributes = (\n spanData: Extract<SpanData, { type: \"response\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"gen_ai.provider.name\": \"openai.responses\",\n };\n const responseObject = isPlainObject(spanData._response) ? spanData._response : {};\n const usage =\n isPlainObject(responseObject.usage) ? responseObject.usage : undefined;\n\n setStringAttr(\n attrs,\n \"gen_ai.request.model\",\n responseObject.model\n );\n setStringAttr(\n attrs,\n \"gen_ai.response.model\",\n responseObject.model\n );\n setStringAttr(\n attrs,\n \"gen_ai.response.id\",\n spanData.response_id ?? responseObject.id ?? responseObject.response_id\n );\n applyUsageAttributes(attrs, usage);\n flattenIndexedMessages(\n \"gen_ai.prompt\",\n normalizeResponseItems(spanData._input ?? responseObject.input),\n attrs\n );\n flattenIndexedMessages(\n \"gen_ai.completion\",\n normalizeResponseItems(responseObject.output),\n attrs\n );\n setJsonAttr(\n attrs,\n \"openai_agents.response.raw_json\",\n responseObject,\n includeRawPayloads\n );\n setStringAttr(\n attrs,\n \"openai_agents.response.object\",\n responseObject.object\n );\n\n return attrs;\n};\n\nconst functionAttributes = (\n spanData: Extract<SpanData, { type: \"function\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n node_type: \"CODE_EXECUTION\",\n tool_name: spanData.name,\n \"openai_agents.function.name\": spanData.name,\n };\n\n setStringAttr(attrs, \"function_input\", spanData.input);\n setStringAttr(attrs, \"function_output\", spanData.output);\n setStringAttr(attrs, \"openai_agents.function.input\", spanData.input);\n setStringAttr(attrs, \"openai_agents.function.output\", spanData.output);\n setJsonAttr(\n attrs,\n \"openai_agents.function.mcp_data_json\",\n spanData.mcp_data,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst agentAttributes = (\n spanData: Extract<SpanData, { type: \"agent\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"openai_agents.agent.name\": spanData.name,\n };\n\n setStringAttr(attrs, \"openai_agents.agent.output_type\", spanData.output_type);\n setJsonAttr(\n attrs,\n \"openai_agents.agent.handoffs_json\",\n spanData.handoffs,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.agent.tools_json\",\n spanData.tools,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst handoffAttributes = (\n spanData: Extract<SpanData, { type: \"handoff\" }>\n): AttributeMap => {\n const attrs: AttributeMap = {};\n setStringAttr(attrs, \"openai_agents.handoff.from_agent\", spanData.from_agent);\n setStringAttr(attrs, \"openai_agents.handoff.to_agent\", spanData.to_agent);\n return attrs;\n};\n\nconst guardrailAttributes = (\n spanData: Extract<SpanData, { type: \"guardrail\" }>\n): AttributeMap => {\n return {\n \"openai_agents.guardrail.name\": spanData.name,\n \"openai_agents.guardrail.triggered\": spanData.triggered,\n };\n};\n\nconst customAttributes = (\n spanData: Extract<SpanData, { type: \"custom\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"openai_agents.custom.name\": spanData.name,\n };\n setJsonAttr(\n attrs,\n \"openai_agents.custom.data_json\",\n spanData.data,\n includeRawPayloads\n );\n return attrs;\n};\n\nconst rawSpanDataAttributes = (\n spanData: SpanData,\n includeRawPayloads: boolean\n): AttributeMap => {\n if (!includeRawPayloads) {\n return {};\n }\n\n return {\n \"openai_agents.raw_json\": stableStringify(spanData),\n };\n};\n\nexport const telemetrySourceVersion = (): string => {\n return SDK_VERSION;\n};\n\nexport const spanKindFor = (span: Pick<AgentsSpan<any>, \"spanData\">): number => {\n return span.spanData.type === \"generation\" || span.spanData.type === \"response\"\n ? SPAN_KIND_CLIENT\n : SPAN_KIND_INTERNAL;\n};\n\nexport const spanNameFor = (span: Pick<AgentsSpan<any>, \"spanData\">): string => {\n switch (span.spanData.type) {\n case \"function\":\n return `Function: ${span.spanData.name}`;\n case \"agent\":\n return `Agent: ${span.spanData.name}`;\n case \"guardrail\":\n return `Guardrail: ${span.spanData.name}`;\n case \"custom\":\n return String(span.spanData.name);\n default:\n return span.spanData.type\n .split(\"_\")\n .map((part: string) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n }\n};\n\nexport const baseTraceAttributes = (\n trace: Pick<AgentsTrace, \"traceId\" | \"name\" | \"groupId\" | \"metadata\">,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"promptlayer.telemetry.source\": \"openai-agents-js\",\n \"promptlayer.telemetry.source_version\": telemetrySourceVersion(),\n \"openai_agents.trace_id_original\": trace.traceId,\n \"openai_agents.workflow_name\": trace.name,\n };\n\n if (trace.groupId) {\n attrs[\"openai_agents.group_id\"] = trace.groupId;\n }\n\n if (isPlainObject(trace.metadata)) {\n Object.entries(trace.metadata).forEach(([key, value]) => {\n if (isScalar(value)) {\n attrs[`openai_agents.metadata.${sanitizeKey(key)}`] = value;\n }\n });\n setJsonAttr(\n attrs,\n \"openai_agents.metadata_json\",\n trace.metadata,\n includeRawPayloads\n );\n }\n\n return attrs;\n};\n\nexport const baseSpanAttributes = (\n span: Pick<AgentsSpan<any>, \"spanId\" | \"parentId\" | \"spanData\">\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"promptlayer.telemetry.source\": \"openai-agents-js\",\n \"promptlayer.telemetry.source_version\": telemetrySourceVersion(),\n \"openai_agents.span_id_original\": span.spanId,\n \"openai_agents.span_type\": span.spanData.type,\n };\n\n if (span.parentId) {\n attrs[\"openai_agents.parent_id_original\"] = span.parentId;\n }\n\n return attrs;\n};\n\nexport const spanDataAttributes = (\n spanData: SpanData,\n includeRawPayloads: boolean\n): AttributeMap => {\n switch (spanData.type) {\n case \"generation\":\n return generationAttributes(spanData, includeRawPayloads);\n case \"response\":\n return responseAttributes(spanData, includeRawPayloads);\n case \"function\":\n return functionAttributes(spanData, includeRawPayloads);\n case \"agent\":\n return agentAttributes(spanData, includeRawPayloads);\n case \"handoff\":\n return handoffAttributes(spanData);\n case \"guardrail\":\n return guardrailAttributes(spanData);\n case \"custom\":\n return customAttributes(spanData, includeRawPayloads);\n default:\n return rawSpanDataAttributes(spanData, includeRawPayloads);\n }\n};\n\nexport const OTLP_STATUS_CODE_UNSET = 0;\nexport const OTLP_STATUS_CODE_OK = 1;\nexport const OTLP_STATUS_CODE_ERROR = 2;\n","import { SDK_VERSION } from \"@/utils/utils\";\nimport type {\n AttributeValue,\n OtlpJsonPayload,\n OtlpSpanRecord,\n} from \"@/integrations/openai-agents/types\";\n\nconst toAnyValue = (value: AttributeValue): Record<string, unknown> => {\n if (typeof value === \"string\") {\n return { stringValue: value };\n }\n\n if (typeof value === \"boolean\") {\n return { boolValue: value };\n }\n\n if (typeof value === \"number\") {\n if (Number.isInteger(value)) {\n return { intValue: String(value) };\n }\n return { doubleValue: value };\n }\n\n if (value === null) {\n return { stringValue: \"null\" };\n }\n\n if (Array.isArray(value)) {\n return {\n arrayValue: {\n values: value.map((item) => toAnyValue(item)),\n },\n };\n }\n\n return {\n kvlistValue: {\n values: Object.entries(value).map(([key, nestedValue]) => ({\n key,\n value: toAnyValue(nestedValue),\n })),\n },\n };\n};\n\nconst toKeyValues = (attributes: Record<string, AttributeValue>) => {\n return Object.entries(attributes).map(([key, value]) => ({\n key,\n value: toAnyValue(value),\n }));\n};\n\nexport interface BuildOtlpJsonPayloadOptions {\n serviceName?: string;\n scopeName?: string;\n scopeVersion?: string;\n}\n\nexport const buildOtlpJsonPayload = (\n spans: OtlpSpanRecord[],\n {\n serviceName = \"promptlayer-openai-agents-js\",\n scopeName = \"promptlayer.integrations.openai_agents\",\n scopeVersion = SDK_VERSION,\n }: BuildOtlpJsonPayloadOptions = {}\n): OtlpJsonPayload => {\n return {\n resourceSpans: [\n {\n resource: {\n attributes: toKeyValues({\n \"service.name\": serviceName,\n }),\n },\n scopeSpans: [\n {\n scope: {\n name: scopeName,\n version: scopeVersion,\n },\n spans: spans.map((span) => {\n const payload: Record<string, unknown> = {\n traceId: span.traceId,\n spanId: span.spanId,\n name: span.name,\n kind: span.kind,\n startTimeUnixNano: span.startTimeUnixNano,\n endTimeUnixNano: span.endTimeUnixNano ?? span.startTimeUnixNano,\n attributes: toKeyValues(span.attributes),\n events: (span.events ?? []).map((event) => ({\n name: event.name,\n timeUnixNano: event.timeUnixNano,\n attributes: toKeyValues(event.attributes ?? {}),\n })),\n links: [],\n };\n\n if (span.parentSpanId) {\n payload.parentSpanId = span.parentSpanId;\n }\n\n if (span.traceState) {\n payload.traceState = span.traceState;\n }\n\n if (span.status) {\n payload.status = {\n code: span.status.code,\n ...(span.status.message ? { message: span.status.message } : {}),\n };\n }\n\n return payload;\n }),\n },\n ],\n },\n ],\n };\n};\n","import { createHash } from \"crypto\";\n\nconst TRACE_HEX_RE = /^[0-9a-f]{32}$/i;\n\nconst sha256Hex = (value: string): string => {\n return createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n};\n\nexport const mapTraceId = (originalTraceId: string): string => {\n const suffix = originalTraceId.startsWith(\"trace_\")\n ? originalTraceId.slice(\"trace_\".length)\n : originalTraceId;\n\n if (TRACE_HEX_RE.test(suffix)) {\n return suffix.toLowerCase();\n }\n\n return sha256Hex(originalTraceId).slice(0, 32);\n};\n\nexport const mapSpanId = (originalSpanId: string): string => {\n return sha256Hex(originalSpanId).slice(0, 16);\n};\n\nexport const syntheticRootSpanId = (originalTraceId: string): string => {\n return sha256Hex(`${originalTraceId}:root`).slice(0, 16);\n};\n","const ISO_TIMESTAMP_RE =\n /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d{1,9}))?(Z|[+-]\\d{2}:\\d{2})?$/;\n\nexport const nowUnixNano = (): string => {\n return (BigInt(Date.now()) * BigInt(1_000_000)).toString();\n};\n\nexport const isoToUnixNano = (\n timestamp: string | null | undefined\n): string | undefined => {\n if (!timestamp) {\n return undefined;\n }\n\n const match = ISO_TIMESTAMP_RE.exec(timestamp);\n if (!match) {\n const millis = Date.parse(timestamp);\n if (Number.isNaN(millis)) {\n return undefined;\n }\n return (BigInt(millis) * BigInt(1_000_000)).toString();\n }\n\n const [, base, fraction = \"\", timezone = \"Z\"] = match;\n const millis = Date.parse(`${base}${timezone}`);\n if (Number.isNaN(millis)) {\n return undefined;\n }\n\n const fractionalNanos = BigInt(\n (fraction + \"000000000\").slice(0, 9)\n );\n return (BigInt(millis) * BigInt(1_000_000) + fractionalNanos).toString();\n};\n\nexport const minUnixNano = (...values: Array<string | undefined>): string => {\n const filtered = values.filter((value): value is string => value !== undefined);\n if (filtered.length === 0) {\n return nowUnixNano();\n }\n\n return filtered.reduce((min, current) =>\n BigInt(current) < BigInt(min) ? current : min\n );\n};\n\nexport const maxUnixNano = (...values: Array<string | undefined>): string => {\n const filtered = values.filter((value): value is string => value !== undefined);\n if (filtered.length === 0) {\n return nowUnixNano();\n }\n\n return filtered.reduce((max, current) =>\n BigInt(current) > BigInt(max) ? current : max\n );\n};\n","export const trimTrailingSlashes = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n\n return value.slice(0, end);\n};\n","import {\n OTLP_STATUS_CODE_ERROR,\n OTLP_STATUS_CODE_OK,\n OTLP_STATUS_CODE_UNSET,\n baseSpanAttributes,\n baseTraceAttributes,\n spanDataAttributes,\n spanKindFor,\n spanNameFor,\n} from \"@/integrations/openai-agents/mapping\";\nimport { buildOtlpJsonPayload } from \"@/integrations/openai-agents/otlp-json\";\nimport { mapSpanId, mapTraceId, syntheticRootSpanId } from \"@/integrations/openai-agents/ids\";\nimport {\n isoToUnixNano,\n maxUnixNano,\n minUnixNano,\n nowUnixNano,\n} from \"@/integrations/openai-agents/time\";\nimport { trimTrailingSlashes } from \"@/integrations/openai-agents/url\";\nimport type {\n OtlpSpanRecord,\n OtlpStatusRecord,\n} from \"@/integrations/openai-agents/types\";\nimport { fetchWithRetry, getCommonHeaders } from \"@/utils/utils\";\nimport type {\n Span as AgentsSpan,\n Trace as AgentsTrace,\n TracingProcessor,\n} from \"@openai/agents\";\n\nconst TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i;\nconst ZERO_TRACE_ID = \"0\".repeat(32);\nconst ZERO_SPAN_ID = \"0\".repeat(16);\n\ninterface UpstreamTraceContext {\n traceId: string;\n parentSpanId: string;\n traceState?: string;\n}\n\ntype TraceMetadataRecord = Record<string, unknown>;\n\ninterface TraceState {\n rootSpan: OtlpSpanRecord;\n spans: Map<string, OtlpSpanRecord>;\n}\n\nexport interface PromptLayerOpenAIAgentsProcessorOptions {\n apiKey: string;\n baseURL: string;\n includeRawPayloads?: boolean;\n}\n\nexport class PromptLayerOpenAIAgentsProcessor implements TracingProcessor {\n private readonly apiKey: string;\n private readonly baseURL: string;\n private readonly includeRawPayloads: boolean;\n private readonly traceStates = new Map<string, TraceState>();\n private readonly completedTraceQueue = new Map<\n string,\n ReturnType<typeof buildOtlpJsonPayload>\n >();\n private readonly pendingExports = new Map<string, Promise<void>>();\n\n constructor({\n apiKey,\n baseURL,\n includeRawPayloads = true,\n }: PromptLayerOpenAIAgentsProcessorOptions) {\n this.apiKey = apiKey;\n this.baseURL = trimTrailingSlashes(baseURL);\n this.includeRawPayloads = includeRawPayloads;\n }\n\n start(): void {}\n\n async onTraceStart(trace: AgentsTrace): Promise<void> {\n if (this.traceStates.has(trace.traceId)) {\n return;\n }\n\n const upstreamContext = this.resolveUpstreamTraceContext(trace.metadata);\n const traceId = upstreamContext?.traceId ?? mapTraceId(trace.traceId);\n this.traceStates.set(trace.traceId, {\n rootSpan: {\n traceId,\n spanId: syntheticRootSpanId(trace.traceId),\n name: trace.name || \"OpenAI Agents Trace\",\n kind: 1,\n startTimeUnixNano: nowUnixNano(),\n parentSpanId: upstreamContext?.parentSpanId,\n traceState: upstreamContext?.traceState,\n attributes: baseTraceAttributes(trace, this.includeRawPayloads),\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n },\n spans: new Map(),\n });\n }\n\n async onTraceEnd(trace: AgentsTrace): Promise<void> {\n const state = this.traceStates.get(trace.traceId);\n if (!state) {\n return;\n }\n\n const childSpans = Array.from(state.spans.values()).sort((left, right) => {\n return BigInt(left.startTimeUnixNano) < BigInt(right.startTimeUnixNano)\n ? -1\n : 1;\n });\n const childStarts = childSpans.map((span) => span.startTimeUnixNano);\n const childEnds = childSpans.map(\n (span) => span.endTimeUnixNano ?? span.startTimeUnixNano\n );\n const rootEnd = maxUnixNano(nowUnixNano(), ...childEnds);\n\n state.rootSpan.startTimeUnixNano = minUnixNano(\n state.rootSpan.startTimeUnixNano,\n ...childStarts\n );\n state.rootSpan.endTimeUnixNano = rootEnd;\n\n const payload = buildOtlpJsonPayload([state.rootSpan, ...childSpans]);\n this.traceStates.delete(trace.traceId);\n this.completedTraceQueue.set(trace.traceId, payload);\n this.startExportForTrace(trace.traceId);\n }\n\n async onSpanStart(span: AgentsSpan<any>): Promise<void> {\n const state = this.ensureTraceStateForSpan(span);\n const existing = state.spans.get(span.spanId);\n const record = existing ?? this.createSpanRecord(span, state.rootSpan.spanId);\n\n record.traceId = state.rootSpan.traceId;\n record.traceState = state.rootSpan.traceState;\n record.name = spanNameFor(span);\n record.kind = spanKindFor(span);\n record.startTimeUnixNano = isoToUnixNano(span.startedAt) ?? record.startTimeUnixNano;\n record.parentSpanId = span.parentId\n ? mapSpanId(span.parentId)\n : state.rootSpan.spanId;\n record.attributes = {\n ...record.attributes,\n ...baseSpanAttributes(span),\n };\n\n state.spans.set(span.spanId, record);\n }\n\n async onSpanEnd(span: AgentsSpan<any>): Promise<void> {\n const state = this.ensureTraceStateForSpan(span);\n const record =\n state.spans.get(span.spanId) ??\n this.createSpanRecord(span, state.rootSpan.spanId);\n\n record.attributes = {\n ...record.attributes,\n ...spanDataAttributes(span.spanData, this.includeRawPayloads),\n };\n record.endTimeUnixNano =\n isoToUnixNano(span.endedAt) ?? record.endTimeUnixNano ?? nowUnixNano();\n record.status = this.statusForSpan(span);\n\n if (span.error) {\n record.events = [\n ...(record.events ?? []),\n {\n name: \"exception\",\n timeUnixNano: record.endTimeUnixNano,\n attributes: {\n \"exception.type\": \"OpenAIAgentsError\",\n \"exception.message\": span.error.message,\n \"openai_agents.error_json\": JSON.stringify(span.error),\n },\n },\n ];\n }\n\n state.spans.set(span.spanId, record);\n }\n\n async shutdown(): Promise<void> {\n await this.forceFlush();\n }\n\n async forceFlush(): Promise<void> {\n for (let pass = 0; pass < 2; pass += 1) {\n for (const traceId of this.completedTraceQueue.keys()) {\n this.startExportForTrace(traceId);\n }\n\n if (this.pendingExports.size === 0) {\n return;\n }\n\n await Promise.all(Array.from(this.pendingExports.values()));\n\n if (this.completedTraceQueue.size === 0) {\n return;\n }\n }\n }\n\n private traceLikeFromSpan(\n span: AgentsSpan<any>\n ): Pick<AgentsTrace, \"traceId\" | \"name\" | \"groupId\" | \"metadata\"> {\n const rawMetadata = this.asRecord(span.traceMetadata);\n const nestedMetadata = this.asRecord(rawMetadata?.metadata);\n\n return {\n traceId: span.traceId,\n name:\n this.readString(rawMetadata?.workflow_name) ??\n this.readString(rawMetadata?.workflowName) ??\n \"OpenAI Agents Trace\",\n groupId:\n this.readString(rawMetadata?.group_id) ??\n this.readString(rawMetadata?.groupId) ??\n null,\n metadata: nestedMetadata ?? rawMetadata ?? {},\n };\n }\n\n private ensureTraceStateForSpan(span: AgentsSpan<any>): TraceState {\n const existing = this.traceStates.get(span.traceId);\n if (existing) {\n return existing;\n }\n\n const traceLike = this.traceLikeFromSpan(span);\n\n const upstreamContext = this.resolveUpstreamTraceContext(traceLike.metadata);\n const traceId = upstreamContext?.traceId ?? mapTraceId(span.traceId);\n const state: TraceState = {\n rootSpan: {\n traceId,\n spanId: syntheticRootSpanId(span.traceId),\n name: traceLike.name,\n kind: 1,\n startTimeUnixNano: isoToUnixNano(span.startedAt) ?? nowUnixNano(),\n parentSpanId: upstreamContext?.parentSpanId,\n traceState: upstreamContext?.traceState,\n attributes: baseTraceAttributes(traceLike, this.includeRawPayloads),\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n },\n spans: new Map(),\n };\n\n this.traceStates.set(span.traceId, state);\n return state;\n }\n\n private createSpanRecord(\n span: AgentsSpan<any>,\n rootSpanId: string\n ): OtlpSpanRecord {\n return {\n traceId:\n this.traceStates.get(span.traceId)?.rootSpan.traceId ?? mapTraceId(span.traceId),\n spanId: mapSpanId(span.spanId),\n parentSpanId: span.parentId ? mapSpanId(span.parentId) : rootSpanId,\n name: spanNameFor(span),\n kind: spanKindFor(span),\n startTimeUnixNano: isoToUnixNano(span.startedAt) ?? nowUnixNano(),\n traceState: this.traceStates.get(span.traceId)?.rootSpan.traceState,\n attributes: {\n ...baseSpanAttributes(span),\n },\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n };\n }\n\n private statusForSpan(span: AgentsSpan<any>): OtlpStatusRecord {\n if (span.error) {\n return {\n code: OTLP_STATUS_CODE_ERROR,\n message: span.error.message,\n };\n }\n\n return {\n code: OTLP_STATUS_CODE_OK,\n };\n }\n\n private async exportPayload(payload: ReturnType<typeof buildOtlpJsonPayload>) {\n const response = await fetchWithRetry(`${this.baseURL}/v1/traces`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": this.apiKey,\n \"X-PromptLayer-Integration\": \"openai-agents-js\",\n ...getCommonHeaders(),\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to export OpenAI Agents traces: ${response.status} ${response.statusText}`\n );\n }\n }\n\n private startExportForTrace(traceId: string): void {\n if (this.pendingExports.has(traceId)) {\n return;\n }\n\n const payload = this.completedTraceQueue.get(traceId);\n if (!payload) {\n return;\n }\n\n const exportPromise = this.exportPayload(payload)\n .then(() => {\n this.completedTraceQueue.delete(traceId);\n })\n .catch((error) => {\n console.error(\n `Failed to export OpenAI Agents trace '${traceId}'.`,\n error\n );\n })\n .finally(() => {\n this.pendingExports.delete(traceId);\n });\n\n this.pendingExports.set(traceId, exportPromise);\n }\n\n private resolveUpstreamTraceContext(\n metadata: AgentsTrace[\"metadata\"] | AgentsSpan<any>[\"traceMetadata\"]\n ): UpstreamTraceContext | null {\n const metadataRecord = this.asRecord(metadata);\n if (!metadataRecord) {\n return null;\n }\n\n const traceparent = metadataRecord.traceparent;\n if (typeof traceparent !== \"string\" || !traceparent.trim()) {\n return null;\n }\n\n const match = traceparent.trim().match(TRACEPARENT_RE);\n if (!match) {\n return null;\n }\n\n const [, version, traceId, parentSpanId] = match;\n const normalizedVersion = version.toLowerCase();\n const normalizedTraceId = traceId.toLowerCase();\n const normalizedParentSpanId = parentSpanId.toLowerCase();\n if (\n normalizedVersion === \"ff\" ||\n normalizedTraceId === ZERO_TRACE_ID ||\n normalizedParentSpanId === ZERO_SPAN_ID\n ) {\n return null;\n }\n\n const traceState =\n typeof metadataRecord.tracestate === \"string\" && metadataRecord.tracestate.trim()\n ? metadataRecord.tracestate.trim()\n : undefined;\n\n return {\n traceId: normalizedTraceId,\n parentSpanId: normalizedParentSpanId,\n traceState,\n };\n }\n\n private asRecord(value: unknown): TraceMetadataRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n\n return value as TraceMetadataRecord;\n }\n\n private readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n }\n}\n","import { PromptLayerOpenAIAgentsProcessor } from \"@/integrations/openai-agents/processor\";\nimport { trimTrailingSlashes } from \"@/integrations/openai-agents/url\";\nimport { readEnv } from \"@/utils/utils\";\n\nexport interface InstrumentOpenAIAgentsOptions {\n apiKey?: string;\n baseURL?: string;\n exclusive?: boolean;\n includeRawPayloads?: boolean;\n}\n\nconst resolveBaseURL = (baseURL?: string): string => {\n return trimTrailingSlashes(\n baseURL ?? readEnv(\"PROMPTLAYER_BASE_URL\") ?? \"https://api.promptlayer.com\"\n );\n};\n\nexport const instrumentOpenAIAgents = async ({\n apiKey = readEnv(\"PROMPTLAYER_API_KEY\"),\n baseURL,\n exclusive = true,\n includeRawPayloads = true,\n}: InstrumentOpenAIAgentsOptions = {}): Promise<PromptLayerOpenAIAgentsProcessor> => {\n if (!apiKey) {\n throw new Error(\n \"PromptLayer API key not provided. Please set PROMPTLAYER_API_KEY or pass apiKey.\"\n );\n }\n\n const agentsModule: typeof import(\"@openai/agents\") = await import(\n \"@openai/agents\"\n );\n\n const processor = new PromptLayerOpenAIAgentsProcessor({\n apiKey,\n baseURL: resolveBaseURL(baseURL),\n includeRawPayloads,\n });\n\n if (exclusive) {\n agentsModule.setTraceProcessors([processor]);\n } else {\n agentsModule.addTraceProcessor(processor);\n }\n\n return processor;\n};\n"],"mappings":"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","names":["SPAN_KIND_INTERNAL","SPAN_KIND_CLIENT","isPlainObject","value","isScalar","sanitizeKey","key","toJsonable","item","stableStringify","normalize","input","acc","setStringAttr","attrs","setNumberAttr","numericValue","setJsonAttr","includeRawPayloads","flattenIndexedMessages","prefix","messages","message","index","normalizeToolCalls","toolCalls","call","_a","_b","_c","_d","_e","functionData","name","argumentsValue","e","getCallId","normalizeToolOutputContent","output","textContent","extractTextContent","normalizeToolCallMessage","normalizeToolResultMessage","outputOverride","toolCallId","content","textParts","part","partType","text","normalizeMessages","items","normalized","normalizeResponseMessage","role","RAW_TOOL_CALL_ITEM_TYPES","RAW_TOOL_RESULT_ITEM_TYPES","normalizeResponseItems","applyUsageAttributes","usage","generationAttributes","spanData","responseAttributes","responseObject","functionAttributes","agentAttributes","handoffAttributes","guardrailAttributes","customAttributes","rawSpanDataAttributes","telemetrySourceVersion","SDK_VERSION","spanKindFor","span","spanNameFor","baseTraceAttributes","trace","baseSpanAttributes","spanDataAttributes","OTLP_STATUS_CODE_UNSET","OTLP_STATUS_CODE_OK","OTLP_STATUS_CODE_ERROR","toAnyValue","value","item","key","nestedValue","toKeyValues","attributes","buildOtlpJsonPayload","spans","serviceName","scopeName","scopeVersion","SDK_VERSION","span","_a","_b","payload","event","__spreadValues","createHash","TRACE_HEX_RE","sha256Hex","value","mapTraceId","originalTraceId","suffix","mapSpanId","originalSpanId","syntheticRootSpanId","ISO_TIMESTAMP_RE","nowUnixNano","isoToUnixNano","timestamp","match","millis","base","fraction","timezone","fractionalNanos","minUnixNano","values","filtered","value","min","current","maxUnixNano","max","trimTrailingSlashes","value","end","TRACEPARENT_RE","ZERO_TRACE_ID","ZERO_SPAN_ID","PromptLayerOpenAIAgentsProcessor","apiKey","baseURL","includeRawPayloads","trimTrailingSlashes","trace","__async","_a","upstreamContext","traceId","mapTraceId","syntheticRootSpanId","nowUnixNano","baseTraceAttributes","OTLP_STATUS_CODE_UNSET","state","childSpans","left","right","childStarts","span","childEnds","rootEnd","maxUnixNano","minUnixNano","payload","buildOtlpJsonPayload","existing","record","spanNameFor","spanKindFor","isoToUnixNano","mapSpanId","__spreadValues","baseSpanAttributes","_b","_c","_d","spanDataAttributes","pass","_e","rawMetadata","nestedMetadata","traceLike","rootSpanId","OTLP_STATUS_CODE_ERROR","OTLP_STATUS_CODE_OK","response","fetchWithRetry","getCommonHeaders","exportPromise","error","metadata","metadataRecord","traceparent","match","version","parentSpanId","normalizedVersion","normalizedTraceId","normalizedParentSpanId","traceState","value","resolveBaseURL","baseURL","_a","trimTrailingSlashes","readEnv","instrumentOpenAIAgents","_0","__async","apiKey","exclusive","includeRawPayloads","agentsModule","processor","PromptLayerOpenAIAgentsProcessor"]}
|
|
1
|
+
{"version":3,"sources":["../../src/integrations/openai-agents/mapping.ts","../../src/integrations/openai-agents/otlp-json.ts","../../src/integrations/openai-agents/ids.ts","../../src/integrations/openai-agents/time.ts","../../src/integrations/openai-agents/url.ts","../../src/integrations/openai-agents/processor.ts","../../src/integrations/openai-agents/instrumentation.ts"],"sourcesContent":["import { SDK_VERSION } from \"@/utils/utils\";\nimport type {\n Span as AgentsSpan,\n SpanData,\n Trace as AgentsTrace,\n} from \"@openai/agents\";\nimport type { AttributeValue } from \"@/integrations/openai-agents/types\";\n\nconst SPAN_KIND_INTERNAL = 1;\nconst SPAN_KIND_CLIENT = 3;\n\ntype AttributeMap = Record<string, AttributeValue>;\ntype NormalizedMessage = Record<string, AttributeValue>;\ntype NormalizedToolCall = {\n id: string;\n type: \"tool_call\";\n name: string;\n arguments: AttributeValue;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst isScalar = (value: unknown): value is string | number | boolean => {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n};\n\nconst sanitizeKey = (key: string): string => {\n return key.replace(/[^a-zA-Z0-9_.-]/g, \"_\");\n};\n\nconst toJsonable = (value: unknown): AttributeValue => {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => toJsonable(item));\n }\n\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, toJsonable(item)])\n );\n }\n\n return String(value);\n};\n\nconst stableStringify = (value: unknown): string => {\n const normalize = (input: unknown): unknown => {\n if (Array.isArray(input)) {\n return input.map((item) => normalize(item));\n }\n\n if (isPlainObject(input)) {\n return Object.keys(input)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = normalize(input[key]);\n return acc;\n }, {});\n }\n\n return input;\n };\n\n return JSON.stringify(normalize(toJsonable(value)));\n};\n\nconst setStringAttr = (attrs: AttributeMap, key: string, value: unknown) => {\n if (value !== undefined && value !== null && value !== \"\") {\n attrs[key] = String(value);\n }\n};\n\nconst setNumberAttr = (attrs: AttributeMap, key: string, value: unknown) => {\n if (value !== undefined && value !== null && value !== \"\") {\n const numericValue = Number(value);\n if (!Number.isNaN(numericValue)) {\n attrs[key] = numericValue;\n }\n }\n};\n\nconst setJsonAttr = (\n attrs: AttributeMap,\n key: string,\n value: unknown,\n includeRawPayloads: boolean\n) => {\n if (includeRawPayloads && value !== undefined && value !== null) {\n attrs[key] = stableStringify(value);\n }\n};\n\nconst flattenIndexedMessages = (\n prefix: string,\n messages: NormalizedMessage[],\n attrs: AttributeMap\n) => {\n messages.forEach((message, index) => {\n Object.entries(message).forEach(([key, value]) => {\n attrs[`${prefix}.${index}.${key}`] = isScalar(value)\n ? value\n : stableStringify(value);\n });\n });\n};\n\nconst normalizeToolCalls = (toolCalls: unknown): NormalizedToolCall[] => {\n if (!Array.isArray(toolCalls)) {\n return [];\n }\n\n return toolCalls\n .map((call) => {\n if (!isPlainObject(call)) {\n return null;\n }\n\n const functionData = isPlainObject(call.function) ? call.function : null;\n const name = functionData?.name ?? call.name ?? \"tool\";\n let argumentsValue =\n functionData?.arguments ?? call.arguments ?? {};\n\n if (typeof argumentsValue === \"string\") {\n try {\n argumentsValue = JSON.parse(argumentsValue);\n } catch {\n argumentsValue = argumentsValue;\n }\n }\n\n return {\n id: String(call.id ?? \"\"),\n type: \"tool_call\",\n name: String(name),\n arguments: toJsonable(argumentsValue),\n };\n })\n .filter((call): call is NormalizedToolCall => call !== null);\n};\n\nconst getCallId = (item: Record<string, unknown>): string | undefined => {\n const value = item.call_id ?? item.callId ?? item.id;\n return value !== undefined && value !== null ? String(value) : undefined;\n};\n\nconst normalizeToolOutputContent = (output: unknown): string | undefined => {\n if (output === undefined || output === null) {\n return undefined;\n }\n\n if (typeof output === \"string\") {\n return output;\n }\n\n if (Array.isArray(output)) {\n const textContent = extractTextContent(output);\n return textContent ?? stableStringify(output);\n }\n\n if (isPlainObject(output)) {\n const textContent = extractTextContent([output]);\n return textContent ?? stableStringify(output);\n }\n\n const textContent = extractTextContent(output);\n if (textContent !== undefined) {\n return textContent;\n }\n\n return stableStringify(output);\n};\n\nconst normalizeToolCallMessage = (\n item: Record<string, unknown>\n): NormalizedMessage | null => {\n let argumentsValue = item.arguments ?? {};\n if (typeof argumentsValue === \"string\") {\n try {\n argumentsValue = JSON.parse(argumentsValue);\n } catch {\n argumentsValue = argumentsValue;\n }\n }\n\n return {\n role: \"assistant\",\n tool_calls: [\n {\n id: getCallId(item) ?? \"\",\n type: \"tool_call\",\n name: String(item.name ?? \"tool\"),\n arguments: toJsonable(argumentsValue),\n },\n ],\n };\n};\n\nconst normalizeToolResultMessage = (\n item: Record<string, unknown>,\n outputOverride?: unknown\n): NormalizedMessage | null => {\n const toolCallId = getCallId(item);\n const content = normalizeToolOutputContent(\n outputOverride ?? item.output ?? item.content\n );\n\n if (!toolCallId && !content) {\n return null;\n }\n\n const message: NormalizedMessage = {\n role: \"tool\",\n };\n\n if (toolCallId) {\n message.tool_call_id = toolCallId;\n }\n\n if (content !== undefined) {\n message.content = content;\n }\n\n return message;\n};\n\nfunction extractTextContent(content: unknown): string | undefined {\n if (content === undefined || content === null) {\n return undefined;\n }\n\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n const textParts = content\n .map((part) => {\n if (!isPlainObject(part)) {\n return null;\n }\n\n const partType = part.type;\n if (\n partType === \"text\" ||\n partType === \"input_text\" ||\n partType === \"output_text\"\n ) {\n const text = part.text ?? part.content;\n return text !== undefined && text !== null ? String(text) : null;\n }\n\n return null;\n })\n .filter((part): part is string => part !== null);\n\n return textParts.length > 0 ? textParts.join(\"\\n\") : undefined;\n }\n\n return String(content);\n}\n\nexport const normalizeMessages = (items: unknown): NormalizedMessage[] => {\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items\n .map((item) => {\n if (!isPlainObject(item)) {\n return null;\n }\n\n const normalized: NormalizedMessage = {};\n if (item.role !== undefined) {\n normalized.role = String(item.role);\n }\n\n const content = extractTextContent(item.content);\n if (content) {\n normalized.content = content;\n }\n\n const toolCalls = normalizeToolCalls(item.tool_calls);\n if (toolCalls.length > 0) {\n normalized.tool_calls = toolCalls;\n }\n\n if (item.tool_call_id) {\n normalized.tool_call_id = String(item.tool_call_id);\n }\n\n return Object.keys(normalized).length > 0 ? normalized : null;\n })\n .filter((message): message is NormalizedMessage => message !== null);\n};\n\nconst normalizeResponseMessage = (\n item: Record<string, unknown>\n): NormalizedMessage | null => {\n const message: NormalizedMessage = {};\n const role = item.role;\n const content = extractTextContent(item.content);\n const toolCalls = normalizeToolCalls(item.tool_calls);\n\n if (role !== undefined && role !== null) {\n message.role = String(role);\n } else if (content || toolCalls.length > 0) {\n message.role = \"assistant\";\n }\n\n if (content) {\n message.content = content;\n }\n\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n\n if (item.tool_call_id) {\n message.tool_call_id = String(item.tool_call_id);\n }\n\n return Object.keys(message).length > 0 ? message : null;\n};\n\nconst RAW_TOOL_CALL_ITEM_TYPES = new Set([\n \"function_call\",\n \"computer_call\",\n \"shell_call\",\n \"apply_patch_call\",\n \"custom_tool_call\",\n \"mcp_call\",\n]);\n\nconst RAW_TOOL_RESULT_ITEM_TYPES = new Set([\n \"function_call_output\",\n \"function_call_result\",\n \"computer_call_output\",\n \"computer_call_result\",\n \"shell_call_output\",\n \"apply_patch_call_output\",\n \"custom_tool_call_output\",\n]);\n\nexport const normalizeResponseItems = (items: unknown): NormalizedMessage[] => {\n if (typeof items === \"string\") {\n return [{ role: \"user\", content: items }];\n }\n\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items\n .flatMap((item) => {\n if (!isPlainObject(item)) {\n return [];\n }\n\n if (item.type === \"message_output_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeResponseMessage(item.rawItem);\n return message ? [message] : [];\n }\n\n if (item.type === \"tool_call_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeToolCallMessage(item.rawItem);\n return message ? [message] : [];\n }\n\n if (item.type === \"tool_call_output_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeToolResultMessage(item.rawItem, item.output);\n return message ? [message] : [];\n }\n\n if (typeof item.type === \"string\" && RAW_TOOL_CALL_ITEM_TYPES.has(item.type)) {\n const message = normalizeToolCallMessage(item);\n return message ? [message] : [];\n }\n\n if (\n typeof item.type === \"string\" &&\n RAW_TOOL_RESULT_ITEM_TYPES.has(item.type)\n ) {\n const message = normalizeToolResultMessage(item);\n return message ? [message] : [];\n }\n\n const message = normalizeResponseMessage(item);\n return message ? [message] : [];\n })\n .filter((message): message is NormalizedMessage => message !== null);\n};\n\nconst applyUsageAttributes = (attrs: AttributeMap, usage: unknown) => {\n if (!isPlainObject(usage)) {\n return;\n }\n\n setNumberAttr(\n attrs,\n \"gen_ai.usage.input_tokens\",\n usage.input_tokens ?? usage.prompt_tokens\n );\n setNumberAttr(\n attrs,\n \"gen_ai.usage.output_tokens\",\n usage.output_tokens ?? usage.completion_tokens\n );\n};\n\nconst generationAttributes = (\n spanData: Extract<SpanData, { type: \"generation\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"gen_ai.provider.name\": \"openai.responses\",\n };\n\n setStringAttr(attrs, \"gen_ai.request.model\", spanData.model);\n applyUsageAttributes(attrs, spanData.usage);\n flattenIndexedMessages(\"gen_ai.prompt\", normalizeMessages(spanData.input), attrs);\n flattenIndexedMessages(\n \"gen_ai.completion\",\n normalizeMessages(spanData.output),\n attrs\n );\n setJsonAttr(\n attrs,\n \"openai_agents.model_config_json\",\n spanData.model_config,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.generation.raw_input_json\",\n spanData.input,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.generation.raw_output_json\",\n spanData.output,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst responseAttributes = (\n spanData: Extract<SpanData, { type: \"response\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"gen_ai.provider.name\": \"openai.responses\",\n };\n const responseObject = isPlainObject(spanData._response) ? spanData._response : {};\n const usage =\n isPlainObject(responseObject.usage) ? responseObject.usage : undefined;\n\n setStringAttr(\n attrs,\n \"gen_ai.request.model\",\n responseObject.model\n );\n setStringAttr(\n attrs,\n \"gen_ai.response.model\",\n responseObject.model\n );\n setStringAttr(\n attrs,\n \"gen_ai.response.id\",\n spanData.response_id ?? responseObject.id ?? responseObject.response_id\n );\n applyUsageAttributes(attrs, usage);\n flattenIndexedMessages(\n \"gen_ai.prompt\",\n normalizeResponseItems(spanData._input ?? responseObject.input),\n attrs\n );\n flattenIndexedMessages(\n \"gen_ai.completion\",\n normalizeResponseItems(responseObject.output),\n attrs\n );\n setJsonAttr(\n attrs,\n \"openai_agents.response.raw_json\",\n responseObject,\n includeRawPayloads\n );\n setStringAttr(\n attrs,\n \"openai_agents.response.object\",\n responseObject.object\n );\n\n return attrs;\n};\n\nconst functionAttributes = (\n spanData: Extract<SpanData, { type: \"function\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n node_type: \"CODE_EXECUTION\",\n tool_name: spanData.name,\n \"openai_agents.function.name\": spanData.name,\n };\n\n setStringAttr(attrs, \"function_input\", spanData.input);\n setStringAttr(attrs, \"function_output\", spanData.output);\n setStringAttr(attrs, \"openai_agents.function.input\", spanData.input);\n setStringAttr(attrs, \"openai_agents.function.output\", spanData.output);\n setJsonAttr(\n attrs,\n \"openai_agents.function.mcp_data_json\",\n spanData.mcp_data,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst agentAttributes = (\n spanData: Extract<SpanData, { type: \"agent\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"openai_agents.agent.name\": spanData.name,\n };\n\n setStringAttr(attrs, \"openai_agents.agent.output_type\", spanData.output_type);\n setJsonAttr(\n attrs,\n \"openai_agents.agent.handoffs_json\",\n spanData.handoffs,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.agent.tools_json\",\n spanData.tools,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst handoffAttributes = (\n spanData: Extract<SpanData, { type: \"handoff\" }>\n): AttributeMap => {\n const attrs: AttributeMap = {};\n setStringAttr(attrs, \"openai_agents.handoff.from_agent\", spanData.from_agent);\n setStringAttr(attrs, \"openai_agents.handoff.to_agent\", spanData.to_agent);\n return attrs;\n};\n\nconst guardrailAttributes = (\n spanData: Extract<SpanData, { type: \"guardrail\" }>\n): AttributeMap => {\n return {\n \"openai_agents.guardrail.name\": spanData.name,\n \"openai_agents.guardrail.triggered\": spanData.triggered,\n };\n};\n\nconst customAttributes = (\n spanData: Extract<SpanData, { type: \"custom\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"openai_agents.custom.name\": spanData.name,\n };\n setJsonAttr(\n attrs,\n \"openai_agents.custom.data_json\",\n spanData.data,\n includeRawPayloads\n );\n return attrs;\n};\n\nconst rawSpanDataAttributes = (\n spanData: SpanData,\n includeRawPayloads: boolean\n): AttributeMap => {\n if (!includeRawPayloads) {\n return {};\n }\n\n return {\n \"openai_agents.raw_json\": stableStringify(spanData),\n };\n};\n\nexport const telemetrySourceVersion = (): string => {\n return SDK_VERSION;\n};\n\nexport const spanKindFor = (span: Pick<AgentsSpan<any>, \"spanData\">): number => {\n return span.spanData.type === \"generation\" || span.spanData.type === \"response\"\n ? SPAN_KIND_CLIENT\n : SPAN_KIND_INTERNAL;\n};\n\nexport const spanNameFor = (span: Pick<AgentsSpan<any>, \"spanData\">): string => {\n switch (span.spanData.type) {\n case \"function\":\n return `Function: ${span.spanData.name}`;\n case \"agent\":\n return `Agent: ${span.spanData.name}`;\n case \"guardrail\":\n return `Guardrail: ${span.spanData.name}`;\n case \"custom\":\n return String(span.spanData.name);\n default:\n return span.spanData.type\n .split(\"_\")\n .map((part: string) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n }\n};\n\nexport const baseTraceAttributes = (\n trace: Pick<AgentsTrace, \"traceId\" | \"name\" | \"groupId\" | \"metadata\">,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"promptlayer.telemetry.source\": \"openai-agents-js\",\n \"promptlayer.telemetry.source_version\": telemetrySourceVersion(),\n \"openai_agents.trace_id_original\": trace.traceId,\n \"openai_agents.workflow_name\": trace.name,\n };\n\n if (trace.groupId) {\n attrs[\"openai_agents.group_id\"] = trace.groupId;\n }\n\n if (isPlainObject(trace.metadata)) {\n Object.entries(trace.metadata).forEach(([key, value]) => {\n if (isScalar(value)) {\n attrs[`openai_agents.metadata.${sanitizeKey(key)}`] = value;\n }\n });\n setJsonAttr(\n attrs,\n \"openai_agents.metadata_json\",\n trace.metadata,\n includeRawPayloads\n );\n }\n\n return attrs;\n};\n\nexport const baseSpanAttributes = (\n span: Pick<AgentsSpan<any>, \"spanId\" | \"parentId\" | \"spanData\">\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"promptlayer.telemetry.source\": \"openai-agents-js\",\n \"promptlayer.telemetry.source_version\": telemetrySourceVersion(),\n \"openai_agents.span_id_original\": span.spanId,\n \"openai_agents.span_type\": span.spanData.type,\n };\n\n if (span.parentId) {\n attrs[\"openai_agents.parent_id_original\"] = span.parentId;\n }\n\n return attrs;\n};\n\nexport const spanDataAttributes = (\n spanData: SpanData,\n includeRawPayloads: boolean\n): AttributeMap => {\n switch (spanData.type) {\n case \"generation\":\n return generationAttributes(spanData, includeRawPayloads);\n case \"response\":\n return responseAttributes(spanData, includeRawPayloads);\n case \"function\":\n return functionAttributes(spanData, includeRawPayloads);\n case \"agent\":\n return agentAttributes(spanData, includeRawPayloads);\n case \"handoff\":\n return handoffAttributes(spanData);\n case \"guardrail\":\n return guardrailAttributes(spanData);\n case \"custom\":\n return customAttributes(spanData, includeRawPayloads);\n default:\n return rawSpanDataAttributes(spanData, includeRawPayloads);\n }\n};\n\nexport const OTLP_STATUS_CODE_UNSET = 0;\nexport const OTLP_STATUS_CODE_OK = 1;\nexport const OTLP_STATUS_CODE_ERROR = 2;\n","import { SDK_VERSION } from \"@/utils/utils\";\nimport type {\n AttributeValue,\n OtlpJsonPayload,\n OtlpSpanRecord,\n} from \"@/integrations/openai-agents/types\";\n\nconst toAnyValue = (value: AttributeValue): Record<string, unknown> => {\n if (typeof value === \"string\") {\n return { stringValue: value };\n }\n\n if (typeof value === \"boolean\") {\n return { boolValue: value };\n }\n\n if (typeof value === \"number\") {\n if (Number.isInteger(value)) {\n return { intValue: String(value) };\n }\n return { doubleValue: value };\n }\n\n if (value === null) {\n return { stringValue: \"null\" };\n }\n\n if (Array.isArray(value)) {\n return {\n arrayValue: {\n values: value.map((item) => toAnyValue(item)),\n },\n };\n }\n\n return {\n kvlistValue: {\n values: Object.entries(value).map(([key, nestedValue]) => ({\n key,\n value: toAnyValue(nestedValue),\n })),\n },\n };\n};\n\nconst toKeyValues = (attributes: Record<string, AttributeValue>) => {\n return Object.entries(attributes).map(([key, value]) => ({\n key,\n value: toAnyValue(value),\n }));\n};\n\nexport interface BuildOtlpJsonPayloadOptions {\n serviceName?: string;\n scopeName?: string;\n scopeVersion?: string;\n}\n\nexport const buildOtlpJsonPayload = (\n spans: OtlpSpanRecord[],\n {\n serviceName = \"promptlayer-openai-agents-js\",\n scopeName = \"promptlayer.integrations.openai_agents\",\n scopeVersion = SDK_VERSION,\n }: BuildOtlpJsonPayloadOptions = {}\n): OtlpJsonPayload => {\n return {\n resourceSpans: [\n {\n resource: {\n attributes: toKeyValues({\n \"service.name\": serviceName,\n }),\n },\n scopeSpans: [\n {\n scope: {\n name: scopeName,\n version: scopeVersion,\n },\n spans: spans.map((span) => {\n const payload: Record<string, unknown> = {\n traceId: span.traceId,\n spanId: span.spanId,\n name: span.name,\n kind: span.kind,\n startTimeUnixNano: span.startTimeUnixNano,\n endTimeUnixNano: span.endTimeUnixNano ?? span.startTimeUnixNano,\n attributes: toKeyValues(span.attributes),\n events: (span.events ?? []).map((event) => ({\n name: event.name,\n timeUnixNano: event.timeUnixNano,\n attributes: toKeyValues(event.attributes ?? {}),\n })),\n links: [],\n };\n\n if (span.parentSpanId) {\n payload.parentSpanId = span.parentSpanId;\n }\n\n if (span.traceState) {\n payload.traceState = span.traceState;\n }\n\n if (span.status) {\n payload.status = {\n code: span.status.code,\n ...(span.status.message ? { message: span.status.message } : {}),\n };\n }\n\n return payload;\n }),\n },\n ],\n },\n ],\n };\n};\n","import { createHash } from \"crypto\";\n\nconst TRACE_HEX_RE = /^[0-9a-f]{32}$/i;\n\nconst sha256Hex = (value: string): string => {\n return createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n};\n\nexport const mapTraceId = (originalTraceId: string): string => {\n const suffix = originalTraceId.startsWith(\"trace_\")\n ? originalTraceId.slice(\"trace_\".length)\n : originalTraceId;\n\n if (TRACE_HEX_RE.test(suffix)) {\n return suffix.toLowerCase();\n }\n\n return sha256Hex(originalTraceId).slice(0, 32);\n};\n\nexport const mapSpanId = (originalSpanId: string): string => {\n return sha256Hex(originalSpanId).slice(0, 16);\n};\n\nexport const syntheticRootSpanId = (originalTraceId: string): string => {\n return sha256Hex(`${originalTraceId}:root`).slice(0, 16);\n};\n","const ISO_TIMESTAMP_RE =\n /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d{1,9}))?(Z|[+-]\\d{2}:\\d{2})?$/;\n\nexport const nowUnixNano = (): string => {\n return (BigInt(Date.now()) * BigInt(1_000_000)).toString();\n};\n\nexport const isoToUnixNano = (\n timestamp: string | null | undefined\n): string | undefined => {\n if (!timestamp) {\n return undefined;\n }\n\n const match = ISO_TIMESTAMP_RE.exec(timestamp);\n if (!match) {\n const millis = Date.parse(timestamp);\n if (Number.isNaN(millis)) {\n return undefined;\n }\n return (BigInt(millis) * BigInt(1_000_000)).toString();\n }\n\n const [, base, fraction = \"\", timezone = \"Z\"] = match;\n const millis = Date.parse(`${base}${timezone}`);\n if (Number.isNaN(millis)) {\n return undefined;\n }\n\n const fractionalNanos = BigInt(\n (fraction + \"000000000\").slice(0, 9)\n );\n return (BigInt(millis) * BigInt(1_000_000) + fractionalNanos).toString();\n};\n\nexport const minUnixNano = (...values: Array<string | undefined>): string => {\n const filtered = values.filter((value): value is string => value !== undefined);\n if (filtered.length === 0) {\n return nowUnixNano();\n }\n\n return filtered.reduce((min, current) =>\n BigInt(current) < BigInt(min) ? current : min\n );\n};\n\nexport const maxUnixNano = (...values: Array<string | undefined>): string => {\n const filtered = values.filter((value): value is string => value !== undefined);\n if (filtered.length === 0) {\n return nowUnixNano();\n }\n\n return filtered.reduce((max, current) =>\n BigInt(current) > BigInt(max) ? current : max\n );\n};\n","export const trimTrailingSlashes = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n\n return value.slice(0, end);\n};\n","import {\n OTLP_STATUS_CODE_ERROR,\n OTLP_STATUS_CODE_OK,\n OTLP_STATUS_CODE_UNSET,\n baseSpanAttributes,\n baseTraceAttributes,\n spanDataAttributes,\n spanKindFor,\n spanNameFor,\n} from \"@/integrations/openai-agents/mapping\";\nimport { buildOtlpJsonPayload } from \"@/integrations/openai-agents/otlp-json\";\nimport { mapSpanId, mapTraceId, syntheticRootSpanId } from \"@/integrations/openai-agents/ids\";\nimport {\n isoToUnixNano,\n maxUnixNano,\n minUnixNano,\n nowUnixNano,\n} from \"@/integrations/openai-agents/time\";\nimport { trimTrailingSlashes } from \"@/integrations/openai-agents/url\";\nimport type {\n OtlpSpanRecord,\n OtlpStatusRecord,\n} from \"@/integrations/openai-agents/types\";\nimport { fetchWithRetry, getCommonHeaders } from \"@/utils/utils\";\nimport type {\n Span as AgentsSpan,\n Trace as AgentsTrace,\n TracingProcessor,\n} from \"@openai/agents\";\n\nconst TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i;\nconst ZERO_TRACE_ID = \"0\".repeat(32);\nconst ZERO_SPAN_ID = \"0\".repeat(16);\n\ninterface UpstreamTraceContext {\n traceId: string;\n parentSpanId: string;\n traceState?: string;\n}\n\ntype TraceMetadataRecord = Record<string, unknown>;\n\ninterface TraceState {\n rootSpan: OtlpSpanRecord;\n spans: Map<string, OtlpSpanRecord>;\n}\n\nexport interface PromptLayerOpenAIAgentsProcessorOptions {\n apiKey: string;\n baseURL: string;\n includeRawPayloads?: boolean;\n}\n\nexport class PromptLayerOpenAIAgentsProcessor implements TracingProcessor {\n private readonly apiKey: string;\n private readonly baseURL: string;\n private readonly includeRawPayloads: boolean;\n private readonly traceStates = new Map<string, TraceState>();\n private readonly completedTraceQueue = new Map<\n string,\n ReturnType<typeof buildOtlpJsonPayload>\n >();\n private readonly pendingExports = new Map<string, Promise<void>>();\n\n constructor({\n apiKey,\n baseURL,\n includeRawPayloads = true,\n }: PromptLayerOpenAIAgentsProcessorOptions) {\n this.apiKey = apiKey;\n this.baseURL = trimTrailingSlashes(baseURL);\n this.includeRawPayloads = includeRawPayloads;\n }\n\n start(): void {}\n\n async onTraceStart(trace: AgentsTrace): Promise<void> {\n if (this.traceStates.has(trace.traceId)) {\n return;\n }\n\n const upstreamContext = this.resolveUpstreamTraceContext(trace.metadata);\n const traceId = upstreamContext?.traceId ?? mapTraceId(trace.traceId);\n this.traceStates.set(trace.traceId, {\n rootSpan: {\n traceId,\n spanId: syntheticRootSpanId(trace.traceId),\n name: trace.name || \"OpenAI Agents Trace\",\n kind: 1,\n startTimeUnixNano: nowUnixNano(),\n parentSpanId: upstreamContext?.parentSpanId,\n traceState: upstreamContext?.traceState,\n attributes: baseTraceAttributes(trace, this.includeRawPayloads),\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n },\n spans: new Map(),\n });\n }\n\n async onTraceEnd(trace: AgentsTrace): Promise<void> {\n const state = this.traceStates.get(trace.traceId);\n if (!state) {\n return;\n }\n\n const childSpans = Array.from(state.spans.values()).sort((left, right) => {\n return BigInt(left.startTimeUnixNano) < BigInt(right.startTimeUnixNano)\n ? -1\n : 1;\n });\n const childStarts = childSpans.map((span) => span.startTimeUnixNano);\n const childEnds = childSpans.map(\n (span) => span.endTimeUnixNano ?? span.startTimeUnixNano\n );\n const rootEnd = maxUnixNano(nowUnixNano(), ...childEnds);\n\n state.rootSpan.startTimeUnixNano = minUnixNano(\n state.rootSpan.startTimeUnixNano,\n ...childStarts\n );\n state.rootSpan.endTimeUnixNano = rootEnd;\n\n const payload = buildOtlpJsonPayload([state.rootSpan, ...childSpans]);\n this.traceStates.delete(trace.traceId);\n this.completedTraceQueue.set(trace.traceId, payload);\n this.startExportForTrace(trace.traceId);\n }\n\n async onSpanStart(span: AgentsSpan<any>): Promise<void> {\n const state = this.ensureTraceStateForSpan(span);\n const existing = state.spans.get(span.spanId);\n const record = existing ?? this.createSpanRecord(span, state.rootSpan.spanId);\n\n record.traceId = state.rootSpan.traceId;\n record.traceState = state.rootSpan.traceState;\n record.name = spanNameFor(span);\n record.kind = spanKindFor(span);\n record.startTimeUnixNano = isoToUnixNano(span.startedAt) ?? record.startTimeUnixNano;\n record.parentSpanId = span.parentId\n ? mapSpanId(span.parentId)\n : state.rootSpan.spanId;\n record.attributes = {\n ...record.attributes,\n ...baseSpanAttributes(span),\n };\n\n state.spans.set(span.spanId, record);\n }\n\n async onSpanEnd(span: AgentsSpan<any>): Promise<void> {\n const state = this.ensureTraceStateForSpan(span);\n const record =\n state.spans.get(span.spanId) ??\n this.createSpanRecord(span, state.rootSpan.spanId);\n\n record.attributes = {\n ...record.attributes,\n ...spanDataAttributes(span.spanData, this.includeRawPayloads),\n };\n record.endTimeUnixNano =\n isoToUnixNano(span.endedAt) ?? record.endTimeUnixNano ?? nowUnixNano();\n record.status = this.statusForSpan(span);\n\n if (span.error) {\n record.events = [\n ...(record.events ?? []),\n {\n name: \"exception\",\n timeUnixNano: record.endTimeUnixNano,\n attributes: {\n \"exception.type\": \"OpenAIAgentsError\",\n \"exception.message\": span.error.message,\n \"openai_agents.error_json\": JSON.stringify(span.error),\n },\n },\n ];\n }\n\n state.spans.set(span.spanId, record);\n }\n\n async shutdown(): Promise<void> {\n await this.forceFlush();\n }\n\n async forceFlush(): Promise<void> {\n for (let pass = 0; pass < 2; pass += 1) {\n for (const traceId of this.completedTraceQueue.keys()) {\n this.startExportForTrace(traceId);\n }\n\n if (this.pendingExports.size === 0) {\n return;\n }\n\n await Promise.all(Array.from(this.pendingExports.values()));\n\n if (this.completedTraceQueue.size === 0) {\n return;\n }\n }\n }\n\n private traceLikeFromSpan(\n span: AgentsSpan<any>\n ): Pick<AgentsTrace, \"traceId\" | \"name\" | \"groupId\" | \"metadata\"> {\n const rawMetadata = this.asRecord(span.traceMetadata);\n const nestedMetadata = this.asRecord(rawMetadata?.metadata);\n\n return {\n traceId: span.traceId,\n name:\n this.readString(rawMetadata?.workflow_name) ??\n this.readString(rawMetadata?.workflowName) ??\n \"OpenAI Agents Trace\",\n groupId:\n this.readString(rawMetadata?.group_id) ??\n this.readString(rawMetadata?.groupId) ??\n null,\n metadata: nestedMetadata ?? rawMetadata ?? {},\n };\n }\n\n private ensureTraceStateForSpan(span: AgentsSpan<any>): TraceState {\n const existing = this.traceStates.get(span.traceId);\n if (existing) {\n return existing;\n }\n\n const traceLike = this.traceLikeFromSpan(span);\n\n const upstreamContext = this.resolveUpstreamTraceContext(traceLike.metadata);\n const traceId = upstreamContext?.traceId ?? mapTraceId(span.traceId);\n const state: TraceState = {\n rootSpan: {\n traceId,\n spanId: syntheticRootSpanId(span.traceId),\n name: traceLike.name,\n kind: 1,\n startTimeUnixNano: isoToUnixNano(span.startedAt) ?? nowUnixNano(),\n parentSpanId: upstreamContext?.parentSpanId,\n traceState: upstreamContext?.traceState,\n attributes: baseTraceAttributes(traceLike, this.includeRawPayloads),\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n },\n spans: new Map(),\n };\n\n this.traceStates.set(span.traceId, state);\n return state;\n }\n\n private createSpanRecord(\n span: AgentsSpan<any>,\n rootSpanId: string\n ): OtlpSpanRecord {\n return {\n traceId:\n this.traceStates.get(span.traceId)?.rootSpan.traceId ?? mapTraceId(span.traceId),\n spanId: mapSpanId(span.spanId),\n parentSpanId: span.parentId ? mapSpanId(span.parentId) : rootSpanId,\n name: spanNameFor(span),\n kind: spanKindFor(span),\n startTimeUnixNano: isoToUnixNano(span.startedAt) ?? nowUnixNano(),\n traceState: this.traceStates.get(span.traceId)?.rootSpan.traceState,\n attributes: {\n ...baseSpanAttributes(span),\n },\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n };\n }\n\n private statusForSpan(span: AgentsSpan<any>): OtlpStatusRecord {\n if (span.error) {\n return {\n code: OTLP_STATUS_CODE_ERROR,\n message: span.error.message,\n };\n }\n\n return {\n code: OTLP_STATUS_CODE_OK,\n };\n }\n\n private async exportPayload(payload: ReturnType<typeof buildOtlpJsonPayload>) {\n const response = await fetchWithRetry(`${this.baseURL}/v1/traces`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": this.apiKey,\n \"X-PromptLayer-Integration\": \"openai-agents-js\",\n ...getCommonHeaders(),\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to export OpenAI Agents traces: ${response.status} ${response.statusText}`\n );\n }\n }\n\n private startExportForTrace(traceId: string): void {\n if (this.pendingExports.has(traceId)) {\n return;\n }\n\n const payload = this.completedTraceQueue.get(traceId);\n if (!payload) {\n return;\n }\n\n const exportPromise = this.exportPayload(payload)\n .then(() => {\n this.completedTraceQueue.delete(traceId);\n })\n .catch((error) => {\n console.error(\n `Failed to export OpenAI Agents trace '${traceId}'.`,\n error\n );\n })\n .finally(() => {\n this.pendingExports.delete(traceId);\n });\n\n this.pendingExports.set(traceId, exportPromise);\n }\n\n private resolveUpstreamTraceContext(\n metadata: AgentsTrace[\"metadata\"] | AgentsSpan<any>[\"traceMetadata\"]\n ): UpstreamTraceContext | null {\n const metadataRecord = this.asRecord(metadata);\n if (!metadataRecord) {\n return null;\n }\n\n const traceparent = metadataRecord.traceparent;\n if (typeof traceparent !== \"string\" || !traceparent.trim()) {\n return null;\n }\n\n const match = traceparent.trim().match(TRACEPARENT_RE);\n if (!match) {\n return null;\n }\n\n const [, version, traceId, parentSpanId] = match;\n const normalizedVersion = version.toLowerCase();\n const normalizedTraceId = traceId.toLowerCase();\n const normalizedParentSpanId = parentSpanId.toLowerCase();\n if (\n normalizedVersion === \"ff\" ||\n normalizedTraceId === ZERO_TRACE_ID ||\n normalizedParentSpanId === ZERO_SPAN_ID\n ) {\n return null;\n }\n\n const traceState =\n typeof metadataRecord.tracestate === \"string\" && metadataRecord.tracestate.trim()\n ? metadataRecord.tracestate.trim()\n : undefined;\n\n return {\n traceId: normalizedTraceId,\n parentSpanId: normalizedParentSpanId,\n traceState,\n };\n }\n\n private asRecord(value: unknown): TraceMetadataRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n\n return value as TraceMetadataRecord;\n }\n\n private readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n }\n}\n","import { PromptLayerOpenAIAgentsProcessor } from \"@/integrations/openai-agents/processor\";\nimport { trimTrailingSlashes } from \"@/integrations/openai-agents/url\";\nimport { readEnv, requirePromptLayerApiKey } from \"@/utils/utils\";\n\nexport interface InstrumentOpenAIAgentsOptions {\n apiKey?: string;\n baseURL?: string;\n exclusive?: boolean;\n includeRawPayloads?: boolean;\n}\n\nconst resolveBaseURL = (baseURL?: string): string => {\n return trimTrailingSlashes(\n baseURL ?? readEnv(\"PROMPTLAYER_BASE_URL\") ?? \"https://api.promptlayer.com\"\n );\n};\n\nexport const instrumentOpenAIAgents = async ({\n apiKey,\n baseURL,\n exclusive = true,\n includeRawPayloads = true,\n}: InstrumentOpenAIAgentsOptions = {}): Promise<PromptLayerOpenAIAgentsProcessor> => {\n const resolvedApiKey = requirePromptLayerApiKey(apiKey);\n\n const agentsModule: typeof import(\"@openai/agents\") = await import(\n \"@openai/agents\"\n );\n\n const processor = new PromptLayerOpenAIAgentsProcessor({\n apiKey: resolvedApiKey,\n baseURL: resolveBaseURL(baseURL),\n includeRawPayloads,\n });\n\n if (exclusive) {\n agentsModule.setTraceProcessors([processor]);\n } else {\n agentsModule.addTraceProcessor(processor);\n }\n\n return processor;\n};\n"],"mappings":"wEAQA,IAAMA,GAAqB,EACrBC,GAAmB,EAWnBC,EAAiBC,GACd,OAAOA,GAAU,UAAYA,IAAU,MAAQ,CAAC,MAAM,QAAQA,CAAK,EAGtEC,EAAYD,GAEd,OAAOA,GAAU,UACjB,OAAOA,GAAU,UACjB,OAAOA,GAAU,UAIfE,GAAeC,GACZA,EAAI,QAAQ,mBAAoB,GAAG,EAGtCC,EAAcJ,GAEhBA,IAAU,MACV,OAAOA,GAAU,UACjB,OAAOA,GAAU,UACjB,OAAOA,GAAU,UAEVA,EAGL,MAAM,QAAQA,CAAK,EACdA,EAAM,IAAKK,GAASD,EAAWC,CAAI,CAAC,EAGzCN,EAAcC,CAAK,EACd,OAAO,YACZ,OAAO,QAAQA,CAAK,EAAE,IAAI,CAAC,CAACG,EAAKE,CAAI,IAAM,CAACF,EAAKC,EAAWC,CAAI,CAAC,CAAC,CACpE,EAGK,OAAOL,CAAK,EAGfM,EAAmBN,GAA2B,CAClD,IAAMO,EAAaC,GACb,MAAM,QAAQA,CAAK,EACdA,EAAM,IAAKH,GAASE,EAAUF,CAAI,CAAC,EAGxCN,EAAcS,CAAK,EACd,OAAO,KAAKA,CAAK,EACrB,KAAK,EACL,OAAgC,CAACC,EAAKN,KACrCM,EAAIN,CAAG,EAAII,EAAUC,EAAML,CAAG,CAAC,EACxBM,GACN,CAAC,CAAC,EAGFD,EAGT,OAAO,KAAK,UAAUD,EAAUH,EAAWJ,CAAK,CAAC,CAAC,CACpD,EAEMU,EAAgB,CAACC,EAAqBR,EAAaH,IAAmB,CAC/CA,GAAU,MAAQA,IAAU,KACrDW,EAAMR,CAAG,EAAI,OAAOH,CAAK,EAE7B,EAEMY,EAAgB,CAACD,EAAqBR,EAAaH,IAAmB,CAC1E,GAA2BA,GAAU,MAAQA,IAAU,GAAI,CACzD,IAAMa,EAAe,OAAOb,CAAK,EAC5B,OAAO,MAAMa,CAAY,IAC5BF,EAAMR,CAAG,EAAIU,EAEjB,CACF,EAEMC,EAAc,CAClBH,EACAR,EACAH,EACAe,IACG,CACCA,GAAsBf,IAAU,QAAaA,IAAU,OACzDW,EAAMR,CAAG,EAAIG,EAAgBN,CAAK,EAEtC,EAEMgB,EAAyB,CAC7BC,EACAC,EACAP,IACG,CACHO,EAAS,QAAQ,CAACC,EAASC,IAAU,CACnC,OAAO,QAAQD,CAAO,EAAE,QAAQ,CAAC,CAAChB,EAAKH,CAAK,IAAM,CAChDW,EAAM,GAAGM,CAAM,IAAIG,CAAK,IAAIjB,CAAG,EAAE,EAAIF,EAASD,CAAK,EAC/CA,EACAM,EAAgBN,CAAK,CAC3B,CAAC,CACH,CAAC,CACH,EAEMqB,EAAsBC,GACrB,MAAM,QAAQA,CAAS,EAIrBA,EACJ,IAAKC,GAAS,CA9HnB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EA+HM,GAAI,CAAC7B,EAAcwB,CAAI,EACrB,OAAO,KAGT,IAAMM,EAAe9B,EAAcwB,EAAK,QAAQ,EAAIA,EAAK,SAAW,KAC9DO,GAAOL,GAAAD,EAAAK,GAAA,YAAAA,EAAc,OAAd,KAAAL,EAAsBD,EAAK,OAA3B,KAAAE,EAAmC,OAC5CM,GACFJ,GAAAD,EAAAG,GAAA,YAAAA,EAAc,YAAd,KAAAH,EAA2BH,EAAK,YAAhC,KAAAI,EAA6C,CAAC,EAEhD,GAAI,OAAOI,GAAmB,SAC5B,GAAI,CACFA,EAAiB,KAAK,MAAMA,CAAc,CAC5C,OAAQC,EAAA,CACND,EAAiBA,CACnB,CAGF,MAAO,CACL,GAAI,QAAOH,EAAAL,EAAK,KAAL,KAAAK,EAAW,EAAE,EACxB,KAAM,YACN,KAAM,OAAOE,CAAI,EACjB,UAAW1B,EAAW2B,CAAc,CACtC,CACF,CAAC,EACA,OAAQR,GAAqCA,IAAS,IAAI,EA7BpD,CAAC,EAgCNU,EAAa5B,GAAsD,CA1JzE,IAAAmB,EAAAC,EA2JE,IAAMzB,GAAQyB,GAAAD,EAAAnB,EAAK,UAAL,KAAAmB,EAAgBnB,EAAK,SAArB,KAAAoB,EAA+BpB,EAAK,GAClD,OAA8BL,GAAU,KAAO,OAAOA,CAAK,EAAI,MACjE,EAEMkC,GAA8BC,GAAwC,CAC1E,GAA4BA,GAAW,KACrC,OAGF,GAAI,OAAOA,GAAW,SACpB,OAAOA,EAGT,GAAI,MAAM,QAAQA,CAAM,EAAG,CACzB,IAAMC,EAAcC,EAAmBF,CAAM,EAC7C,OAAOC,GAAA,KAAAA,EAAe9B,EAAgB6B,CAAM,CAC9C,CAEA,GAAIpC,EAAcoC,CAAM,EAAG,CACzB,IAAMC,EAAcC,EAAmB,CAACF,CAAM,CAAC,EAC/C,OAAOC,GAAA,KAAAA,EAAe9B,EAAgB6B,CAAM,CAC9C,CAEA,IAAMC,EAAcC,EAAmBF,CAAM,EAC7C,OAAIC,IAAgB,OACXA,EAGF9B,EAAgB6B,CAAM,CAC/B,EAEMG,EACJjC,GAC6B,CA5L/B,IAAAmB,EAAAC,EAAAC,EA6LE,IAAIK,GAAiBP,EAAAnB,EAAK,YAAL,KAAAmB,EAAkB,CAAC,EACxC,GAAI,OAAOO,GAAmB,SAC5B,GAAI,CACFA,EAAiB,KAAK,MAAMA,CAAc,CAC5C,OAAQC,EAAA,CACND,EAAiBA,CACnB,CAGF,MAAO,CACL,KAAM,YACN,WAAY,CACV,CACE,IAAIN,EAAAQ,EAAU5B,CAAI,IAAd,KAAAoB,EAAmB,GACvB,KAAM,YACN,KAAM,QAAOC,EAAArB,EAAK,OAAL,KAAAqB,EAAa,MAAM,EAChC,UAAWtB,EAAW2B,CAAc,CACtC,CACF,CACF,CACF,EAEMQ,EAA6B,CACjClC,EACAmC,IAC6B,CAtN/B,IAAAhB,EAuNE,IAAMiB,EAAaR,EAAU5B,CAAI,EAC3BqC,EAAUR,IACdV,EAAAgB,GAAA,KAAAA,EAAkBnC,EAAK,SAAvB,KAAAmB,EAAiCnB,EAAK,OACxC,EAEA,GAAI,CAACoC,GAAc,CAACC,EAClB,OAAO,KAGT,IAAMvB,EAA6B,CACjC,KAAM,MACR,EAEA,OAAIsB,IACFtB,EAAQ,aAAesB,GAGrBC,IAAY,SACdvB,EAAQ,QAAUuB,GAGbvB,CACT,EAEA,SAASkB,EAAmBK,EAAsC,CAChE,GAA6BA,GAAY,KAIzC,IAAI,OAAOA,GAAY,SACrB,OAAOA,EAGT,GAAI,MAAM,QAAQA,CAAO,EAAG,CAC1B,IAAMC,EAAYD,EACf,IAAKE,GAAS,CA1PrB,IAAApB,EA2PQ,GAAI,CAACzB,EAAc6C,CAAI,EACrB,OAAO,KAGT,IAAMC,EAAWD,EAAK,KACtB,GACEC,IAAa,QACbA,IAAa,cACbA,IAAa,cACb,CACA,IAAMC,GAAOtB,EAAAoB,EAAK,OAAL,KAAApB,EAAaoB,EAAK,QAC/B,OAA6BE,GAAS,KAAO,OAAOA,CAAI,EAAI,IAC9D,CAEA,OAAO,IACT,CAAC,EACA,OAAQF,GAAyBA,IAAS,IAAI,EAEjD,OAAOD,EAAU,OAAS,EAAIA,EAAU,KAAK;AAAA,CAAI,EAAI,MACvD,CAEA,OAAO,OAAOD,CAAO,EACvB,CAEO,IAAMK,EAAqBC,GAC3B,MAAM,QAAQA,CAAK,EAIjBA,EACJ,IAAK3C,GAAS,CACb,GAAI,CAACN,EAAcM,CAAI,EACrB,OAAO,KAGT,IAAM4C,EAAgC,CAAC,EACnC5C,EAAK,OAAS,SAChB4C,EAAW,KAAO,OAAO5C,EAAK,IAAI,GAGpC,IAAMqC,EAAUL,EAAmBhC,EAAK,OAAO,EAC3CqC,IACFO,EAAW,QAAUP,GAGvB,IAAMpB,EAAYD,EAAmBhB,EAAK,UAAU,EACpD,OAAIiB,EAAU,OAAS,IACrB2B,EAAW,WAAa3B,GAGtBjB,EAAK,eACP4C,EAAW,aAAe,OAAO5C,EAAK,YAAY,GAG7C,OAAO,KAAK4C,CAAU,EAAE,OAAS,EAAIA,EAAa,IAC3D,CAAC,EACA,OAAQ9B,GAA0CA,IAAY,IAAI,EA9B5D,CAAC,EAiCN+B,EACJ7C,GAC6B,CAC7B,IAAMc,EAA6B,CAAC,EAC9BgC,EAAO9C,EAAK,KACZqC,EAAUL,EAAmBhC,EAAK,OAAO,EACzCiB,EAAYD,EAAmBhB,EAAK,UAAU,EAEpD,OAA0B8C,GAAS,KACjChC,EAAQ,KAAO,OAAOgC,CAAI,GACjBT,GAAWpB,EAAU,OAAS,KACvCH,EAAQ,KAAO,aAGbuB,IACFvB,EAAQ,QAAUuB,GAGhBpB,EAAU,OAAS,IACrBH,EAAQ,WAAaG,GAGnBjB,EAAK,eACPc,EAAQ,aAAe,OAAOd,EAAK,YAAY,GAG1C,OAAO,KAAKc,CAAO,EAAE,OAAS,EAAIA,EAAU,IACrD,EAEMiC,GAA2B,IAAI,IAAI,CACvC,gBACA,gBACA,aACA,mBACA,mBACA,UACF,CAAC,EAEKC,GAA6B,IAAI,IAAI,CACzC,uBACA,uBACA,uBACA,uBACA,oBACA,0BACA,yBACF,CAAC,EAEYC,EAA0BN,GACjC,OAAOA,GAAU,SACZ,CAAC,CAAE,KAAM,OAAQ,QAASA,CAAM,CAAC,EAGrC,MAAM,QAAQA,CAAK,EAIjBA,EACJ,QAAS3C,GAAS,CACjB,GAAI,CAACN,EAAcM,CAAI,EACrB,MAAO,CAAC,EAGV,GAAIA,EAAK,OAAS,uBAAyBN,EAAcM,EAAK,OAAO,EAAG,CACtE,IAAMc,EAAU+B,EAAyB7C,EAAK,OAAO,EACrD,OAAOc,EAAU,CAACA,CAAO,EAAI,CAAC,CAChC,CAEA,GAAId,EAAK,OAAS,kBAAoBN,EAAcM,EAAK,OAAO,EAAG,CACjE,IAAMc,EAAUmB,EAAyBjC,EAAK,OAAO,EACrD,OAAOc,EAAU,CAACA,CAAO,EAAI,CAAC,CAChC,CAEA,GAAId,EAAK,OAAS,yBAA2BN,EAAcM,EAAK,OAAO,EAAG,CACxE,IAAMc,EAAUoB,EAA2BlC,EAAK,QAASA,EAAK,MAAM,EACpE,OAAOc,EAAU,CAACA,CAAO,EAAI,CAAC,CAChC,CAEA,GAAI,OAAOd,EAAK,MAAS,UAAY+C,GAAyB,IAAI/C,EAAK,IAAI,EAAG,CAC5E,IAAMc,EAAUmB,EAAyBjC,CAAI,EAC7C,OAAOc,EAAU,CAACA,CAAO,EAAI,CAAC,CAChC,CAEA,GACE,OAAOd,EAAK,MAAS,UACrBgD,GAA2B,IAAIhD,EAAK,IAAI,EACxC,CACA,IAAMc,EAAUoB,EAA2BlC,CAAI,EAC/C,OAAOc,EAAU,CAACA,CAAO,EAAI,CAAC,CAChC,CAEA,IAAMA,EAAU+B,EAAyB7C,CAAI,EAC7C,OAAOc,EAAU,CAACA,CAAO,EAAI,CAAC,CAChC,CAAC,EACA,OAAQA,GAA0CA,IAAY,IAAI,EAxC5D,CAAC,EA2CNoC,EAAuB,CAAC5C,EAAqB6C,IAAmB,CAvZtE,IAAAhC,EAAAC,EAwZO1B,EAAcyD,CAAK,IAIxB5C,EACED,EACA,6BACAa,EAAAgC,EAAM,eAAN,KAAAhC,EAAsBgC,EAAM,aAC9B,EACA5C,EACED,EACA,8BACAc,EAAA+B,EAAM,gBAAN,KAAA/B,EAAuB+B,EAAM,iBAC/B,EACF,EAEMC,GAAuB,CAC3BC,EACA3C,IACiB,CACjB,IAAMJ,EAAsB,CAC1B,uBAAwB,kBAC1B,EAEA,OAAAD,EAAcC,EAAO,uBAAwB+C,EAAS,KAAK,EAC3DH,EAAqB5C,EAAO+C,EAAS,KAAK,EAC1C1C,EAAuB,gBAAiB+B,EAAkBW,EAAS,KAAK,EAAG/C,CAAK,EAChFK,EACE,oBACA+B,EAAkBW,EAAS,MAAM,EACjC/C,CACF,EACAG,EACEH,EACA,kCACA+C,EAAS,aACT3C,CACF,EACAD,EACEH,EACA,0CACA+C,EAAS,MACT3C,CACF,EACAD,EACEH,EACA,2CACA+C,EAAS,OACT3C,CACF,EAEOJ,CACT,EAEMgD,GAAqB,CACzBD,EACA3C,IACiB,CAjdnB,IAAAS,EAAAC,EAAAC,EAkdE,IAAMf,EAAsB,CAC1B,uBAAwB,kBAC1B,EACMiD,EAAiB7D,EAAc2D,EAAS,SAAS,EAAIA,EAAS,UAAY,CAAC,EAC3EF,EACJzD,EAAc6D,EAAe,KAAK,EAAIA,EAAe,MAAQ,OAE/D,OAAAlD,EACEC,EACA,uBACAiD,EAAe,KACjB,EACAlD,EACEC,EACA,wBACAiD,EAAe,KACjB,EACAlD,EACEC,EACA,sBACAc,GAAAD,EAAAkC,EAAS,cAAT,KAAAlC,EAAwBoC,EAAe,KAAvC,KAAAnC,EAA6CmC,EAAe,WAC9D,EACAL,EAAqB5C,EAAO6C,CAAK,EACjCxC,EACE,gBACAsC,GAAuB5B,EAAAgC,EAAS,SAAT,KAAAhC,EAAmBkC,EAAe,KAAK,EAC9DjD,CACF,EACAK,EACE,oBACAsC,EAAuBM,EAAe,MAAM,EAC5CjD,CACF,EACAG,EACEH,EACA,kCACAiD,EACA7C,CACF,EACAL,EACEC,EACA,gCACAiD,EAAe,MACjB,EAEOjD,CACT,EAEMkD,GAAqB,CACzBH,EACA3C,IACiB,CACjB,IAAMJ,EAAsB,CAC1B,UAAW,iBACX,UAAW+C,EAAS,KACpB,8BAA+BA,EAAS,IAC1C,EAEA,OAAAhD,EAAcC,EAAO,iBAAkB+C,EAAS,KAAK,EACrDhD,EAAcC,EAAO,kBAAmB+C,EAAS,MAAM,EACvDhD,EAAcC,EAAO,+BAAgC+C,EAAS,KAAK,EACnEhD,EAAcC,EAAO,gCAAiC+C,EAAS,MAAM,EACrE5C,EACEH,EACA,uCACA+C,EAAS,SACT3C,CACF,EAEOJ,CACT,EAEMmD,GAAkB,CACtBJ,EACA3C,IACiB,CACjB,IAAMJ,EAAsB,CAC1B,2BAA4B+C,EAAS,IACvC,EAEA,OAAAhD,EAAcC,EAAO,kCAAmC+C,EAAS,WAAW,EAC5E5C,EACEH,EACA,oCACA+C,EAAS,SACT3C,CACF,EACAD,EACEH,EACA,iCACA+C,EAAS,MACT3C,CACF,EAEOJ,CACT,EAEMoD,GACJL,GACiB,CACjB,IAAM/C,EAAsB,CAAC,EAC7B,OAAAD,EAAcC,EAAO,mCAAoC+C,EAAS,UAAU,EAC5EhD,EAAcC,EAAO,iCAAkC+C,EAAS,QAAQ,EACjE/C,CACT,EAEMqD,GACJN,IAEO,CACL,+BAAgCA,EAAS,KACzC,oCAAqCA,EAAS,SAChD,GAGIO,GAAmB,CACvBP,EACA3C,IACiB,CACjB,IAAMJ,EAAsB,CAC1B,4BAA6B+C,EAAS,IACxC,EACA,OAAA5C,EACEH,EACA,iCACA+C,EAAS,KACT3C,CACF,EACOJ,CACT,EAEMuD,GAAwB,CAC5BR,EACA3C,IAEKA,EAIE,CACL,yBAA0BT,EAAgBoD,CAAQ,CACpD,EALS,CAAC,EAQCS,EAAyB,IAC7BC,EAGIC,EAAeC,GACnBA,EAAK,SAAS,OAAS,cAAgBA,EAAK,SAAS,OAAS,WACjExE,GACAD,GAGO0E,EAAeD,GAAoD,CAC9E,OAAQA,EAAK,SAAS,KAAM,CAC1B,IAAK,WACH,MAAO,aAAaA,EAAK,SAAS,IAAI,GACxC,IAAK,QACH,MAAO,UAAUA,EAAK,SAAS,IAAI,GACrC,IAAK,YACH,MAAO,cAAcA,EAAK,SAAS,IAAI,GACzC,IAAK,SACH,OAAO,OAAOA,EAAK,SAAS,IAAI,EAClC,QACE,OAAOA,EAAK,SAAS,KAClB,MAAM,GAAG,EACT,IAAK1B,GAAiBA,EAAK,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,CAAC,EAClE,KAAK,GAAG,CACf,CACF,EAEa4B,EAAsB,CACjCC,EACA1D,IACiB,CACjB,IAAMJ,EAAsB,CAC1B,+BAAgC,mBAChC,uCAAwCwD,EAAuB,EAC/D,kCAAmCM,EAAM,QACzC,8BAA+BA,EAAM,IACvC,EAEA,OAAIA,EAAM,UACR9D,EAAM,wBAAwB,EAAI8D,EAAM,SAGtC1E,EAAc0E,EAAM,QAAQ,IAC9B,OAAO,QAAQA,EAAM,QAAQ,EAAE,QAAQ,CAAC,CAACtE,EAAKH,CAAK,IAAM,CACnDC,EAASD,CAAK,IAChBW,EAAM,0BAA0BT,GAAYC,CAAG,CAAC,EAAE,EAAIH,EAE1D,CAAC,EACDc,EACEH,EACA,8BACA8D,EAAM,SACN1D,CACF,GAGKJ,CACT,EAEa+D,EACXJ,GACiB,CACjB,IAAM3D,EAAsB,CAC1B,+BAAgC,mBAChC,uCAAwCwD,EAAuB,EAC/D,iCAAkCG,EAAK,OACvC,0BAA2BA,EAAK,SAAS,IAC3C,EAEA,OAAIA,EAAK,WACP3D,EAAM,kCAAkC,EAAI2D,EAAK,UAG5C3D,CACT,EAEagE,EAAqB,CAChCjB,EACA3C,IACiB,CACjB,OAAQ2C,EAAS,KAAM,CACrB,IAAK,aACH,OAAOD,GAAqBC,EAAU3C,CAAkB,EAC1D,IAAK,WACH,OAAO4C,GAAmBD,EAAU3C,CAAkB,EACxD,IAAK,WACH,OAAO8C,GAAmBH,EAAU3C,CAAkB,EACxD,IAAK,QACH,OAAO+C,GAAgBJ,EAAU3C,CAAkB,EACrD,IAAK,UACH,OAAOgD,GAAkBL,CAAQ,EACnC,IAAK,YACH,OAAOM,GAAoBN,CAAQ,EACrC,IAAK,SACH,OAAOO,GAAiBP,EAAU3C,CAAkB,EACtD,QACE,OAAOmD,GAAsBR,EAAU3C,CAAkB,CAC7D,CACF,EAEa6D,EAAyB,EACzBC,EAAsB,EACtBC,EAAyB,EClsBtC,IAAMC,EAAcC,GACd,OAAOA,GAAU,SACZ,CAAE,YAAaA,CAAM,EAG1B,OAAOA,GAAU,UACZ,CAAE,UAAWA,CAAM,EAGxB,OAAOA,GAAU,SACf,OAAO,UAAUA,CAAK,EACjB,CAAE,SAAU,OAAOA,CAAK,CAAE,EAE5B,CAAE,YAAaA,CAAM,EAG1BA,IAAU,KACL,CAAE,YAAa,MAAO,EAG3B,MAAM,QAAQA,CAAK,EACd,CACL,WAAY,CACV,OAAQA,EAAM,IAAKC,GAASF,EAAWE,CAAI,CAAC,CAC9C,CACF,EAGK,CACL,YAAa,CACX,OAAQ,OAAO,QAAQD,CAAK,EAAE,IAAI,CAAC,CAACE,EAAKC,CAAW,KAAO,CACzD,IAAAD,EACA,MAAOH,EAAWI,CAAW,CAC/B,EAAE,CACJ,CACF,EAGIC,EAAeC,GACZ,OAAO,QAAQA,CAAU,EAAE,IAAI,CAAC,CAACH,EAAKF,CAAK,KAAO,CACvD,IAAAE,EACA,MAAOH,EAAWC,CAAK,CACzB,EAAE,EASSM,GAAuB,CAClCC,EACA,CACE,YAAAC,EAAc,+BACd,UAAAC,EAAY,yCACZ,aAAAC,EAAeC,CACjB,EAAiC,CAAC,KAE3B,CACL,cAAe,CACb,CACE,SAAU,CACR,WAAYP,EAAY,CACtB,eAAgBI,CAClB,CAAC,CACH,EACA,WAAY,CACV,CACE,MAAO,CACL,KAAMC,EACN,QAASC,CACX,EACA,MAAOH,EAAM,IAAKK,GAAS,CAhFvC,IAAAC,EAAAC,EAiFc,IAAMC,EAAmC,CACvC,QAASH,EAAK,QACd,OAAQA,EAAK,OACb,KAAMA,EAAK,KACX,KAAMA,EAAK,KACX,kBAAmBA,EAAK,kBACxB,iBAAiBC,EAAAD,EAAK,kBAAL,KAAAC,EAAwBD,EAAK,kBAC9C,WAAYR,EAAYQ,EAAK,UAAU,EACvC,SAASE,EAAAF,EAAK,SAAL,KAAAE,EAAe,CAAC,GAAG,IAAKE,GAAO,CAzFxD,IAAAH,EAyF4D,OAC1C,KAAMG,EAAM,KACZ,aAAcA,EAAM,aACpB,WAAYZ,GAAYS,EAAAG,EAAM,aAAN,KAAAH,EAAoB,CAAC,CAAC,CAChD,EAAE,EACF,MAAO,CAAC,CACV,EAEA,OAAID,EAAK,eACPG,EAAQ,aAAeH,EAAK,cAG1BA,EAAK,aACPG,EAAQ,WAAaH,EAAK,YAGxBA,EAAK,SACPG,EAAQ,OAASE,EAAA,CACf,KAAML,EAAK,OAAO,MACdA,EAAK,OAAO,QAAU,CAAE,QAASA,EAAK,OAAO,OAAQ,EAAI,CAAC,IAI3DG,CACT,CAAC,CACH,CACF,CACF,CACF,CACF,GCtHF,OAAS,cAAAG,OAAkB,SAE3B,IAAMC,GAAe,kBAEfC,EAAaC,GACVH,GAAW,QAAQ,EAAE,OAAOG,EAAO,MAAM,EAAE,OAAO,KAAK,EAGnDC,EAAcC,GAAoC,CAC7D,IAAMC,EAASD,EAAgB,WAAW,QAAQ,EAC9CA,EAAgB,MAAM,CAAe,EACrCA,EAEJ,OAAIJ,GAAa,KAAKK,CAAM,EACnBA,EAAO,YAAY,EAGrBJ,EAAUG,CAAe,EAAE,MAAM,EAAG,EAAE,CAC/C,EAEaE,EAAaC,GACjBN,EAAUM,CAAc,EAAE,MAAM,EAAG,EAAE,EAGjCC,EAAuBJ,GAC3BH,EAAU,GAAGG,CAAe,OAAO,EAAE,MAAM,EAAG,EAAE,ECzBzD,IAAMK,GACJ,8EAEWC,EAAc,KACjB,OAAO,KAAK,IAAI,CAAC,EAAI,OAAO,GAAS,GAAG,SAAS,EAG9CC,EACXC,GACuB,CACvB,GAAI,CAACA,EACH,OAGF,IAAMC,EAAQJ,GAAiB,KAAKG,CAAS,EAC7C,GAAI,CAACC,EAAO,CACV,IAAMC,EAAS,KAAK,MAAMF,CAAS,EACnC,OAAI,OAAO,MAAME,CAAM,EACrB,QAEM,OAAOA,CAAM,EAAI,OAAO,GAAS,GAAG,SAAS,CACvD,CAEA,GAAM,CAAC,CAAEC,EAAMC,EAAW,GAAIC,EAAW,GAAG,EAAIJ,EAC1CC,EAAS,KAAK,MAAM,GAAGC,CAAI,GAAGE,CAAQ,EAAE,EAC9C,GAAI,OAAO,MAAMH,CAAM,EACrB,OAGF,IAAMI,EAAkB,QACrBF,EAAW,aAAa,MAAM,EAAG,CAAC,CACrC,EACA,OAAQ,OAAOF,CAAM,EAAI,OAAO,GAAS,EAAII,GAAiB,SAAS,CACzE,EAEaC,GAAc,IAAIC,IAA8C,CAC3E,IAAMC,EAAWD,EAAO,OAAQE,GAA2BA,IAAU,MAAS,EAC9E,OAAID,EAAS,SAAW,EACfX,EAAY,EAGdW,EAAS,OAAO,CAACE,EAAKC,IAC3B,OAAOA,CAAO,EAAI,OAAOD,CAAG,EAAIC,EAAUD,CAC5C,CACF,EAEaE,GAAc,IAAIL,IAA8C,CAC3E,IAAMC,EAAWD,EAAO,OAAQE,GAA2BA,IAAU,MAAS,EAC9E,OAAID,EAAS,SAAW,EACfX,EAAY,EAGdW,EAAS,OAAO,CAACK,EAAKF,IAC3B,OAAOA,CAAO,EAAI,OAAOE,CAAG,EAAIF,EAAUE,CAC5C,CACF,ECvDO,IAAMC,EAAuBC,GAA0B,CAC5D,IAAIC,EAAMD,EAAM,OAEhB,KAAOC,EAAM,GAAKD,EAAM,WAAWC,EAAM,CAAC,IAAM,IAC9CA,GAAO,EAGT,OAAOD,EAAM,MAAM,EAAGC,CAAG,CAC3B,ECsBA,IAAMC,GAAiB,+DACjBC,GAAgB,IAAI,OAAO,EAAE,EAC7BC,GAAe,IAAI,OAAO,EAAE,EAqBrBC,EAAN,KAAmE,CAWxE,YAAY,CACV,OAAAC,EACA,QAAAC,EACA,mBAAAC,EAAqB,EACvB,EAA4C,CAX5C,KAAiB,YAAc,IAAI,IACnC,KAAiB,oBAAsB,IAAI,IAI3C,KAAiB,eAAiB,IAAI,IAOpC,KAAK,OAASF,EACd,KAAK,QAAUG,EAAoBF,CAAO,EAC1C,KAAK,mBAAqBC,CAC5B,CAEA,OAAc,CAAC,CAET,aAAaE,EAAmC,QAAAC,EAAA,sBA5ExD,IAAAC,EA6EI,GAAI,KAAK,YAAY,IAAIF,EAAM,OAAO,EACpC,OAGF,IAAMG,EAAkB,KAAK,4BAA4BH,EAAM,QAAQ,EACjEI,GAAUF,EAAAC,GAAA,YAAAA,EAAiB,UAAjB,KAAAD,EAA4BG,EAAWL,EAAM,OAAO,EACpE,KAAK,YAAY,IAAIA,EAAM,QAAS,CAClC,SAAU,CACR,QAAAI,EACA,OAAQE,EAAoBN,EAAM,OAAO,EACzC,KAAMA,EAAM,MAAQ,sBACpB,KAAM,EACN,kBAAmBO,EAAY,EAC/B,aAAcJ,GAAA,YAAAA,EAAiB,aAC/B,WAAYA,GAAA,YAAAA,EAAiB,WAC7B,WAAYK,EAAoBR,EAAO,KAAK,kBAAkB,EAC9D,OAAQ,CAAE,KAAMS,CAAuB,EACvC,OAAQ,CAAC,CACX,EACA,MAAO,IAAI,GACb,CAAC,CACH,GAEM,WAAWT,EAAmC,QAAAC,EAAA,sBAClD,IAAMS,EAAQ,KAAK,YAAY,IAAIV,EAAM,OAAO,EAChD,GAAI,CAACU,EACH,OAGF,IAAMC,EAAa,MAAM,KAAKD,EAAM,MAAM,OAAO,CAAC,EAAE,KAAK,CAACE,EAAMC,IACvD,OAAOD,EAAK,iBAAiB,EAAI,OAAOC,EAAM,iBAAiB,EAClE,GACA,CACL,EACKC,EAAcH,EAAW,IAAKI,GAASA,EAAK,iBAAiB,EAC7DC,EAAYL,EAAW,IAC1BI,GAAM,CAjHb,IAAAb,EAiHgB,OAAAA,EAAAa,EAAK,kBAAL,KAAAb,EAAwBa,EAAK,kBACzC,EACME,EAAUC,GAAYX,EAAY,EAAG,GAAGS,CAAS,EAEvDN,EAAM,SAAS,kBAAoBS,GACjCT,EAAM,SAAS,kBACf,GAAGI,CACL,EACAJ,EAAM,SAAS,gBAAkBO,EAEjC,IAAMG,EAAUC,GAAqB,CAACX,EAAM,SAAU,GAAGC,CAAU,CAAC,EACpE,KAAK,YAAY,OAAOX,EAAM,OAAO,EACrC,KAAK,oBAAoB,IAAIA,EAAM,QAASoB,CAAO,EACnD,KAAK,oBAAoBpB,EAAM,OAAO,CACxC,GAEM,YAAYe,EAAsC,QAAAd,EAAA,sBAjI1D,IAAAC,EAkII,IAAMQ,EAAQ,KAAK,wBAAwBK,CAAI,EACzCO,EAAWZ,EAAM,MAAM,IAAIK,EAAK,MAAM,EACtCQ,EAASD,GAAA,KAAAA,EAAY,KAAK,iBAAiBP,EAAML,EAAM,SAAS,MAAM,EAE5Ea,EAAO,QAAUb,EAAM,SAAS,QAChCa,EAAO,WAAab,EAAM,SAAS,WACnCa,EAAO,KAAOC,EAAYT,CAAI,EAC9BQ,EAAO,KAAOE,EAAYV,CAAI,EAC9BQ,EAAO,mBAAoBrB,EAAAwB,EAAcX,EAAK,SAAS,IAA5B,KAAAb,EAAiCqB,EAAO,kBACnEA,EAAO,aAAeR,EAAK,SACvBY,EAAUZ,EAAK,QAAQ,EACvBL,EAAM,SAAS,OACnBa,EAAO,WAAaK,IAAA,GACfL,EAAO,YACPM,EAAmBd,CAAI,GAG5BL,EAAM,MAAM,IAAIK,EAAK,OAAQQ,CAAM,CACrC,GAEM,UAAUR,EAAsC,QAAAd,EAAA,sBAtJxD,IAAAC,EAAA4B,EAAAC,EAAAC,EAuJI,IAAMtB,EAAQ,KAAK,wBAAwBK,CAAI,EACzCQ,GACJrB,EAAAQ,EAAM,MAAM,IAAIK,EAAK,MAAM,IAA3B,KAAAb,EACA,KAAK,iBAAiBa,EAAML,EAAM,SAAS,MAAM,EAEnDa,EAAO,WAAaK,IAAA,GACfL,EAAO,YACPU,EAAmBlB,EAAK,SAAU,KAAK,kBAAkB,GAE9DQ,EAAO,iBACLQ,GAAAD,EAAAJ,EAAcX,EAAK,OAAO,IAA1B,KAAAe,EAA+BP,EAAO,kBAAtC,KAAAQ,EAAyDxB,EAAY,EACvEgB,EAAO,OAAS,KAAK,cAAcR,CAAI,EAEnCA,EAAK,QACPQ,EAAO,OAAS,CACd,IAAIS,EAAAT,EAAO,SAAP,KAAAS,EAAiB,CAAC,EACtB,CACE,KAAM,YACN,aAAcT,EAAO,gBACrB,WAAY,CACV,iBAAkB,oBAClB,oBAAqBR,EAAK,MAAM,QAChC,2BAA4B,KAAK,UAAUA,EAAK,KAAK,CACvD,CACF,CACF,GAGFL,EAAM,MAAM,IAAIK,EAAK,OAAQQ,CAAM,CACrC,GAEM,UAA0B,QAAAtB,EAAA,sBAC9B,MAAM,KAAK,WAAW,CACxB,GAEM,YAA4B,QAAAA,EAAA,sBAChC,QAASiC,EAAO,EAAGA,EAAO,EAAGA,GAAQ,EAAG,CACtC,QAAW9B,KAAW,KAAK,oBAAoB,KAAK,EAClD,KAAK,oBAAoBA,CAAO,EASlC,GANI,KAAK,eAAe,OAAS,IAIjC,MAAM,QAAQ,IAAI,MAAM,KAAK,KAAK,eAAe,OAAO,CAAC,CAAC,EAEtD,KAAK,oBAAoB,OAAS,GACpC,MAEJ,CACF,GAEQ,kBACNW,EACgE,CA9MpE,IAAAb,EAAA4B,EAAAC,EAAAC,EAAAG,EA+MI,IAAMC,EAAc,KAAK,SAASrB,EAAK,aAAa,EAC9CsB,EAAiB,KAAK,SAASD,GAAA,YAAAA,EAAa,QAAQ,EAE1D,MAAO,CACL,QAASrB,EAAK,QACd,MACEe,GAAA5B,EAAA,KAAK,WAAWkC,GAAA,YAAAA,EAAa,aAAa,IAA1C,KAAAlC,EACA,KAAK,WAAWkC,GAAA,YAAAA,EAAa,YAAY,IADzC,KAAAN,EAEA,sBACF,SACEE,GAAAD,EAAA,KAAK,WAAWK,GAAA,YAAAA,EAAa,QAAQ,IAArC,KAAAL,EACA,KAAK,WAAWK,GAAA,YAAAA,EAAa,OAAO,IADpC,KAAAJ,EAEA,KACF,UAAUG,EAAAE,GAAA,KAAAA,EAAkBD,IAAlB,KAAAD,EAAiC,CAAC,CAC9C,CACF,CAEQ,wBAAwBpB,EAAmC,CAhOrE,IAAAb,EAAA4B,EAiOI,IAAMR,EAAW,KAAK,YAAY,IAAIP,EAAK,OAAO,EAClD,GAAIO,EACF,OAAOA,EAGT,IAAMgB,EAAY,KAAK,kBAAkBvB,CAAI,EAEvCZ,EAAkB,KAAK,4BAA4BmC,EAAU,QAAQ,EAErE5B,EAAoB,CACxB,SAAU,CACR,SAHYR,EAAAC,GAAA,YAAAA,EAAiB,UAAjB,KAAAD,EAA4BG,EAAWU,EAAK,OAAO,EAI/D,OAAQT,EAAoBS,EAAK,OAAO,EACxC,KAAMuB,EAAU,KAChB,KAAM,EACN,mBAAmBR,EAAAJ,EAAcX,EAAK,SAAS,IAA5B,KAAAe,EAAiCvB,EAAY,EAChE,aAAcJ,GAAA,YAAAA,EAAiB,aAC/B,WAAYA,GAAA,YAAAA,EAAiB,WAC7B,WAAYK,EAAoB8B,EAAW,KAAK,kBAAkB,EAClE,OAAQ,CAAE,KAAM7B,CAAuB,EACvC,OAAQ,CAAC,CACX,EACA,MAAO,IAAI,GACb,EAEA,YAAK,YAAY,IAAIM,EAAK,QAASL,CAAK,EACjCA,CACT,CAEQ,iBACNK,EACAwB,EACgB,CAjQpB,IAAArC,EAAA4B,EAAAC,EAAAC,EAkQI,MAAO,CACL,SACEF,GAAA5B,EAAA,KAAK,YAAY,IAAIa,EAAK,OAAO,IAAjC,YAAAb,EAAoC,SAAS,UAA7C,KAAA4B,EAAwDzB,EAAWU,EAAK,OAAO,EACjF,OAAQY,EAAUZ,EAAK,MAAM,EAC7B,aAAcA,EAAK,SAAWY,EAAUZ,EAAK,QAAQ,EAAIwB,EACzD,KAAMf,EAAYT,CAAI,EACtB,KAAMU,EAAYV,CAAI,EACtB,mBAAmBgB,EAAAL,EAAcX,EAAK,SAAS,IAA5B,KAAAgB,EAAiCxB,EAAY,EAChE,YAAYyB,EAAA,KAAK,YAAY,IAAIjB,EAAK,OAAO,IAAjC,YAAAiB,EAAoC,SAAS,WACzD,WAAYJ,EAAA,GACPC,EAAmBd,CAAI,GAE5B,OAAQ,CAAE,KAAMN,CAAuB,EACvC,OAAQ,CAAC,CACX,CACF,CAEQ,cAAcM,EAAyC,CAC7D,OAAIA,EAAK,MACA,CACL,KAAMyB,EACN,QAASzB,EAAK,MAAM,OACtB,EAGK,CACL,KAAM0B,CACR,CACF,CAEc,cAAcrB,EAAkD,QAAAnB,EAAA,sBAC5E,IAAMyC,EAAW,MAAMC,EAAe,GAAG,KAAK,OAAO,aAAc,CACjE,OAAQ,OACR,QAASf,EAAA,CACP,eAAgB,mBAChB,YAAa,KAAK,OAClB,4BAA6B,oBAC1BgB,EAAiB,GAEtB,KAAM,KAAK,UAAUxB,CAAO,CAC9B,CAAC,EAED,GAAI,CAACsB,EAAS,GACZ,MAAM,IAAI,MACR,0CAA0CA,EAAS,MAAM,IAAIA,EAAS,UAAU,EAClF,CAEJ,GAEQ,oBAAoBtC,EAAuB,CACjD,GAAI,KAAK,eAAe,IAAIA,CAAO,EACjC,OAGF,IAAMgB,EAAU,KAAK,oBAAoB,IAAIhB,CAAO,EACpD,GAAI,CAACgB,EACH,OAGF,IAAMyB,EAAgB,KAAK,cAAczB,CAAO,EAC7C,KAAK,IAAM,CACV,KAAK,oBAAoB,OAAOhB,CAAO,CACzC,CAAC,EACA,MAAO0C,GAAU,CAChB,QAAQ,MACN,yCAAyC1C,CAAO,KAChD0C,CACF,CACF,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,eAAe,OAAO1C,CAAO,CACpC,CAAC,EAEH,KAAK,eAAe,IAAIA,EAASyC,CAAa,CAChD,CAEQ,4BACNE,EAC6B,CAC7B,IAAMC,EAAiB,KAAK,SAASD,CAAQ,EAC7C,GAAI,CAACC,EACH,OAAO,KAGT,IAAMC,EAAcD,EAAe,YACnC,GAAI,OAAOC,GAAgB,UAAY,CAACA,EAAY,KAAK,EACvD,OAAO,KAGT,IAAMC,EAAQD,EAAY,KAAK,EAAE,MAAMzD,EAAc,EACrD,GAAI,CAAC0D,EACH,OAAO,KAGT,GAAM,CAAC,CAAEC,EAAS/C,EAASgD,CAAY,EAAIF,EACrCG,EAAoBF,EAAQ,YAAY,EACxCG,EAAoBlD,EAAQ,YAAY,EACxCmD,EAAyBH,EAAa,YAAY,EACxD,GACEC,IAAsB,MACtBC,IAAsB7D,IACtB8D,IAA2B7D,GAE3B,OAAO,KAGT,IAAM8D,GACJ,OAAOR,EAAe,YAAe,UAAYA,EAAe,WAAW,KAAK,EAC5EA,EAAe,WAAW,KAAK,EAC/B,OAEN,MAAO,CACL,QAASM,EACT,aAAcC,EACd,WAAAC,EACF,CACF,CAEQ,SAASC,EAA4C,CAC3D,MAAI,CAACA,GAAS,OAAOA,GAAU,UAAY,MAAM,QAAQA,CAAK,EACrD,KAGFA,CACT,CAEQ,WAAWA,EAAoC,CACrD,OAAO,OAAOA,GAAU,UAAYA,EAAM,KAAK,EAAIA,EAAQ,MAC7D,CACF,ECxXA,IAAMC,GAAkBC,GAA6B,CAXrD,IAAAC,EAYE,OAAOC,GACLD,EAAAD,GAAA,KAAAA,EAAWG,EAAQ,sBAAsB,IAAzC,KAAAF,EAA8C,6BAChD,CACF,EAEaG,GAAyB,IAK+CC,IAAAC,EAAA,SAAAD,GAAA,UALxC,CAC3C,OAAAE,EACA,QAAAP,EACA,UAAAQ,EAAY,GACZ,mBAAAC,EAAqB,EACvB,EAAmC,CAAC,EAAiD,CACnF,IAAMC,EAAiBC,EAAyBJ,CAAM,EAEhDK,EAAgD,KAAM,QAC1D,gBACF,EAEMC,EAAY,IAAIC,EAAiC,CACrD,OAAQJ,EACR,QAASX,GAAeC,CAAO,EAC/B,mBAAAS,CACF,CAAC,EAED,OAAID,EACFI,EAAa,mBAAmB,CAACC,CAAS,CAAC,EAE3CD,EAAa,kBAAkBC,CAAS,EAGnCA,CACT","names":["SPAN_KIND_INTERNAL","SPAN_KIND_CLIENT","isPlainObject","value","isScalar","sanitizeKey","key","toJsonable","item","stableStringify","normalize","input","acc","setStringAttr","attrs","setNumberAttr","numericValue","setJsonAttr","includeRawPayloads","flattenIndexedMessages","prefix","messages","message","index","normalizeToolCalls","toolCalls","call","_a","_b","_c","_d","_e","functionData","name","argumentsValue","e","getCallId","normalizeToolOutputContent","output","textContent","extractTextContent","normalizeToolCallMessage","normalizeToolResultMessage","outputOverride","toolCallId","content","textParts","part","partType","text","normalizeMessages","items","normalized","normalizeResponseMessage","role","RAW_TOOL_CALL_ITEM_TYPES","RAW_TOOL_RESULT_ITEM_TYPES","normalizeResponseItems","applyUsageAttributes","usage","generationAttributes","spanData","responseAttributes","responseObject","functionAttributes","agentAttributes","handoffAttributes","guardrailAttributes","customAttributes","rawSpanDataAttributes","telemetrySourceVersion","SDK_VERSION","spanKindFor","span","spanNameFor","baseTraceAttributes","trace","baseSpanAttributes","spanDataAttributes","OTLP_STATUS_CODE_UNSET","OTLP_STATUS_CODE_OK","OTLP_STATUS_CODE_ERROR","toAnyValue","value","item","key","nestedValue","toKeyValues","attributes","buildOtlpJsonPayload","spans","serviceName","scopeName","scopeVersion","SDK_VERSION","span","_a","_b","payload","event","__spreadValues","createHash","TRACE_HEX_RE","sha256Hex","value","mapTraceId","originalTraceId","suffix","mapSpanId","originalSpanId","syntheticRootSpanId","ISO_TIMESTAMP_RE","nowUnixNano","isoToUnixNano","timestamp","match","millis","base","fraction","timezone","fractionalNanos","minUnixNano","values","filtered","value","min","current","maxUnixNano","max","trimTrailingSlashes","value","end","TRACEPARENT_RE","ZERO_TRACE_ID","ZERO_SPAN_ID","PromptLayerOpenAIAgentsProcessor","apiKey","baseURL","includeRawPayloads","trimTrailingSlashes","trace","__async","_a","upstreamContext","traceId","mapTraceId","syntheticRootSpanId","nowUnixNano","baseTraceAttributes","OTLP_STATUS_CODE_UNSET","state","childSpans","left","right","childStarts","span","childEnds","rootEnd","maxUnixNano","minUnixNano","payload","buildOtlpJsonPayload","existing","record","spanNameFor","spanKindFor","isoToUnixNano","mapSpanId","__spreadValues","baseSpanAttributes","_b","_c","_d","spanDataAttributes","pass","_e","rawMetadata","nestedMetadata","traceLike","rootSpanId","OTLP_STATUS_CODE_ERROR","OTLP_STATUS_CODE_OK","response","fetchWithRetry","getCommonHeaders","exportPromise","error","metadata","metadataRecord","traceparent","match","version","parentSpanId","normalizedVersion","normalizedTraceId","normalizedParentSpanId","traceState","value","resolveBaseURL","baseURL","_a","trimTrailingSlashes","readEnv","instrumentOpenAIAgents","_0","__async","apiKey","exclusive","includeRawPayloads","resolvedApiKey","requirePromptLayerApiKey","agentsModule","processor","PromptLayerOpenAIAgentsProcessor"]}
|