promptlayer 1.0.61 → 1.1.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.
@@ -0,0 +1,3 @@
1
+ import{E,a as g,d,f as T,g as C,h as V}from"./chunk-SWBNW72U.js";var rt=1,ot=3,p=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),D=e=>typeof e=="string"||typeof e=="number"||typeof e=="boolean",at=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))},F=(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}`]=D(s)?s:_(s)})})},Y=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):[],Q=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},st=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)},K=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=Q(e))!=null?r:"",type:"tool_call",name:String((o=e.name)!=null?o:"tool"),arguments:S(t)}]}},B=(e,t)=>{var a;let n=Q(e),r=st((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 $=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};
3
+ //# sourceMappingURL=openai-agents.js.map
@@ -0,0 +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"]}