promptlayer 1.0.60 → 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.
- package/README.md +9 -0
- package/dist/esm/chunk-SWBNW72U.js +2 -0
- package/dist/esm/chunk-SWBNW72U.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/openai-agents.js +3 -0
- package/dist/esm/openai-agents.js.map +1 -0
- package/dist/index.d.mts +229 -9
- package/dist/index.d.ts +229 -9
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/openai-agents.d.mts +42 -0
- package/dist/openai-agents.d.ts +42 -0
- package/dist/openai-agents.js +3 -0
- package/dist/openai-agents.js.map +1 -0
- package/package.json +24 -3
- package/src/integrations/openai-agents/helpers.test.ts +254 -0
- package/src/integrations/openai-agents/ids.ts +27 -0
- package/src/integrations/openai-agents/index.ts +8 -0
- package/src/integrations/openai-agents/instrumentation.test.ts +46 -0
- package/src/integrations/openai-agents/instrumentation.ts +47 -0
- package/src/integrations/openai-agents/mapping.ts +714 -0
- package/src/integrations/openai-agents/otlp-json.ts +120 -0
- package/src/integrations/openai-agents/processor.test.ts +509 -0
- package/src/integrations/openai-agents/processor.ts +388 -0
- package/src/integrations/openai-agents/time.ts +56 -0
- package/src/integrations/openai-agents/types.ts +49 -0
- package/src/integrations/openai-agents/url.ts +9 -0
- package/src/openai-agents.ts +1 -0
- package/src/types.ts +302 -9
- package/src/utils/blueprint-builder.test.ts +727 -0
- package/src/utils/blueprint-builder.ts +957 -126
- package/src/utils/streaming.test.ts +498 -0
- package/src/utils/streaming.ts +471 -43
- package/src/utils/utils.ts +4 -0
- package/tsup.config.ts +4 -1
- package/vitest.config.ts +3 -0
|
@@ -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"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -42,14 +42,49 @@ interface GetPromptTemplateParams {
|
|
|
42
42
|
}
|
|
43
43
|
declare const templateFormat: readonly ["f-string", "jinja2"];
|
|
44
44
|
type TemplateFormat = (typeof templateFormat)[number];
|
|
45
|
+
type FileAnnotation = {
|
|
46
|
+
type: "file_citation";
|
|
47
|
+
index: number;
|
|
48
|
+
file_id: string;
|
|
49
|
+
filename: string;
|
|
50
|
+
};
|
|
51
|
+
type WebAnnotation = {
|
|
52
|
+
type: "url_citation";
|
|
53
|
+
title: string;
|
|
54
|
+
url: string;
|
|
55
|
+
start_index: number;
|
|
56
|
+
end_index: number;
|
|
57
|
+
cited_text?: string;
|
|
58
|
+
encrypted_index?: string;
|
|
59
|
+
};
|
|
60
|
+
type MapAnnotation = {
|
|
61
|
+
type: "map_citation";
|
|
62
|
+
title: string;
|
|
63
|
+
url: string;
|
|
64
|
+
place_id?: string;
|
|
65
|
+
start_index: number;
|
|
66
|
+
end_index: number;
|
|
67
|
+
cited_text?: string;
|
|
68
|
+
};
|
|
69
|
+
type ContainerFileAnnotation = {
|
|
70
|
+
type: "container_file_citation";
|
|
71
|
+
container_id: string;
|
|
72
|
+
start_index?: number;
|
|
73
|
+
end_index?: number;
|
|
74
|
+
filename?: string;
|
|
75
|
+
file_id?: string;
|
|
76
|
+
};
|
|
77
|
+
type Annotation = WebAnnotation | FileAnnotation | MapAnnotation | ContainerFileAnnotation;
|
|
45
78
|
type ImageUrl = {
|
|
46
79
|
url: string;
|
|
80
|
+
detail?: string;
|
|
47
81
|
};
|
|
48
82
|
type TextContent = {
|
|
49
83
|
id?: string;
|
|
50
84
|
type: "text";
|
|
51
85
|
text: string;
|
|
52
|
-
annotations?:
|
|
86
|
+
annotations?: Annotation[];
|
|
87
|
+
thought_signature?: string;
|
|
53
88
|
};
|
|
54
89
|
type ThinkingContent = {
|
|
55
90
|
id?: string;
|
|
@@ -62,15 +97,18 @@ type CodeContent = {
|
|
|
62
97
|
container_id?: string;
|
|
63
98
|
type: "code";
|
|
64
99
|
code: string;
|
|
100
|
+
language?: string;
|
|
65
101
|
};
|
|
66
102
|
type ImageContent = {
|
|
67
103
|
type: "image_url";
|
|
68
104
|
image_url: ImageUrl;
|
|
105
|
+
image_variable?: string;
|
|
69
106
|
};
|
|
70
107
|
type Media = {
|
|
71
108
|
title: string;
|
|
72
109
|
type: string;
|
|
73
|
-
url
|
|
110
|
+
url?: string;
|
|
111
|
+
format?: "base64" | "url" | "neither";
|
|
74
112
|
};
|
|
75
113
|
type MediaContent = {
|
|
76
114
|
type: "media";
|
|
@@ -80,22 +118,196 @@ type MediaVariable = {
|
|
|
80
118
|
type: "media_variable";
|
|
81
119
|
name: string;
|
|
82
120
|
};
|
|
83
|
-
type
|
|
121
|
+
type OutputMediaContent = {
|
|
122
|
+
type: "output_media";
|
|
123
|
+
id?: string;
|
|
124
|
+
url: string;
|
|
125
|
+
mime_type?: string;
|
|
126
|
+
media_type?: "image" | "video" | "audio";
|
|
127
|
+
provider_metadata?: Record<string, unknown>;
|
|
128
|
+
};
|
|
129
|
+
type ServerToolUseContent = {
|
|
130
|
+
type: "server_tool_use";
|
|
131
|
+
id: string;
|
|
132
|
+
name: string;
|
|
133
|
+
input?: Record<string, unknown>;
|
|
134
|
+
};
|
|
135
|
+
type WebSearchResult = {
|
|
136
|
+
type: "web_search_result";
|
|
137
|
+
url?: string;
|
|
138
|
+
title?: string;
|
|
139
|
+
encrypted_content?: string;
|
|
140
|
+
page_age?: string;
|
|
141
|
+
};
|
|
142
|
+
type WebSearchToolResultContent = {
|
|
143
|
+
type: "web_search_tool_result";
|
|
144
|
+
tool_use_id: string;
|
|
145
|
+
content?: WebSearchResult[];
|
|
146
|
+
};
|
|
147
|
+
type CodeExecutionResultContent = {
|
|
148
|
+
type: "code_execution_result";
|
|
149
|
+
output: string;
|
|
150
|
+
outcome?: string;
|
|
151
|
+
};
|
|
152
|
+
type McpListToolsContent = {
|
|
153
|
+
type: "mcp_list_tools";
|
|
154
|
+
id?: string;
|
|
155
|
+
server_label?: string;
|
|
156
|
+
tools?: Record<string, unknown>[];
|
|
157
|
+
error?: string | Record<string, unknown>;
|
|
158
|
+
};
|
|
159
|
+
type McpCallContent = {
|
|
160
|
+
type: "mcp_call";
|
|
161
|
+
id?: string;
|
|
162
|
+
name?: string;
|
|
163
|
+
server_label?: string;
|
|
164
|
+
arguments?: string;
|
|
165
|
+
output?: string;
|
|
166
|
+
error?: string | Record<string, unknown>;
|
|
167
|
+
approval_request_id?: string;
|
|
168
|
+
};
|
|
169
|
+
type McpApprovalRequestContent = {
|
|
170
|
+
type: "mcp_approval_request";
|
|
171
|
+
id?: string;
|
|
172
|
+
name?: string;
|
|
173
|
+
arguments?: string;
|
|
174
|
+
server_label?: string;
|
|
175
|
+
};
|
|
176
|
+
type McpApprovalResponseContent = {
|
|
177
|
+
type: "mcp_approval_response";
|
|
178
|
+
approval_request_id: string;
|
|
179
|
+
approve: boolean;
|
|
180
|
+
};
|
|
181
|
+
type BashCodeExecutionToolResultContent = {
|
|
182
|
+
type: "bash_code_execution_tool_result";
|
|
183
|
+
tool_use_id: string;
|
|
184
|
+
content?: Record<string, unknown>;
|
|
185
|
+
};
|
|
186
|
+
type TextEditorCodeExecutionToolResultContent = {
|
|
187
|
+
type: "text_editor_code_execution_tool_result";
|
|
188
|
+
tool_use_id: string;
|
|
189
|
+
content?: Record<string, unknown>;
|
|
190
|
+
};
|
|
191
|
+
type ShellCallContent = {
|
|
192
|
+
type: "shell_call";
|
|
193
|
+
id?: string;
|
|
194
|
+
call_id?: string;
|
|
195
|
+
action?: Record<string, unknown>;
|
|
196
|
+
status?: string;
|
|
197
|
+
};
|
|
198
|
+
type ShellCallOutputContent = {
|
|
199
|
+
type: "shell_call_output";
|
|
200
|
+
id?: string;
|
|
201
|
+
call_id?: string;
|
|
202
|
+
output?: Record<string, unknown>[];
|
|
203
|
+
status?: string;
|
|
204
|
+
};
|
|
205
|
+
type ApplyPatchCallContent = {
|
|
206
|
+
type: "apply_patch_call";
|
|
207
|
+
id?: string;
|
|
208
|
+
call_id?: string;
|
|
209
|
+
operation?: Record<string, unknown>;
|
|
210
|
+
status?: string;
|
|
211
|
+
};
|
|
212
|
+
type ApplyPatchCallOutputContent = {
|
|
213
|
+
type: "apply_patch_call_output";
|
|
214
|
+
id?: string;
|
|
215
|
+
call_id?: string;
|
|
216
|
+
output?: string;
|
|
217
|
+
status?: string;
|
|
218
|
+
};
|
|
219
|
+
type Content = TextContent | ThinkingContent | CodeContent | ImageContent | MediaContent | MediaVariable | OutputMediaContent | ServerToolUseContent | WebSearchToolResultContent | CodeExecutionResultContent | McpListToolsContent | McpCallContent | McpApprovalRequestContent | McpApprovalResponseContent | BashCodeExecutionToolResultContent | TextEditorCodeExecutionToolResultContent | ShellCallContent | ShellCallOutputContent | ApplyPatchCallContent | ApplyPatchCallOutputContent;
|
|
84
220
|
type Function_ = {
|
|
85
221
|
name: string;
|
|
86
222
|
description: string;
|
|
223
|
+
strict?: boolean;
|
|
87
224
|
parameters: Record<string, unknown>;
|
|
88
225
|
};
|
|
89
|
-
type
|
|
90
|
-
|
|
91
|
-
|
|
226
|
+
type FunctionCall = {
|
|
227
|
+
name: string;
|
|
228
|
+
arguments: string;
|
|
229
|
+
};
|
|
230
|
+
type WebSearchToolFilters = {
|
|
231
|
+
allowed_domains?: string[];
|
|
232
|
+
};
|
|
233
|
+
type WebSearchToolUserLocation = {
|
|
234
|
+
city?: string;
|
|
235
|
+
country?: string;
|
|
236
|
+
region?: string;
|
|
237
|
+
timezone?: string;
|
|
238
|
+
type: "approximate";
|
|
239
|
+
};
|
|
240
|
+
type OpenAIWebSearchToolConfig = {
|
|
241
|
+
type: "web_search" | "web_search_2025_08_26";
|
|
242
|
+
filters?: WebSearchToolFilters;
|
|
243
|
+
search_context_size?: "low" | "medium" | "high";
|
|
244
|
+
user_location?: WebSearchToolUserLocation;
|
|
245
|
+
};
|
|
246
|
+
type ComparisonFilter = {
|
|
247
|
+
key: string;
|
|
248
|
+
value: string | number | boolean;
|
|
249
|
+
operation: "eq" | "ne" | "gt" | "gte" | "lt" | "lte";
|
|
250
|
+
};
|
|
251
|
+
type CompoundFilter = {
|
|
252
|
+
operator: "and" | "or";
|
|
253
|
+
operands: (ComparisonFilter | CompoundFilter)[];
|
|
254
|
+
};
|
|
255
|
+
type RankingOptions = {
|
|
256
|
+
ranker?: "auto" | "default-2024-11-15";
|
|
257
|
+
score_threshold?: number;
|
|
258
|
+
};
|
|
259
|
+
type FileSearchToolConfig = {
|
|
260
|
+
type: "file_search";
|
|
261
|
+
vector_store_ids: string[];
|
|
262
|
+
filters?: ComparisonFilter | CompoundFilter;
|
|
263
|
+
max_num_results?: number;
|
|
264
|
+
ranking_options?: RankingOptions;
|
|
265
|
+
};
|
|
266
|
+
type CodeInterpreterToolConfig = {
|
|
267
|
+
type: "code_interpreter";
|
|
268
|
+
container?: Record<string, unknown>;
|
|
269
|
+
};
|
|
270
|
+
type ImageGenerationToolConfig = {
|
|
271
|
+
type: "image_generation";
|
|
272
|
+
};
|
|
273
|
+
type ShellToolConfig = {
|
|
274
|
+
type: "shell";
|
|
275
|
+
environment?: Record<string, unknown>;
|
|
276
|
+
};
|
|
277
|
+
type ApplyPatchToolConfig = {
|
|
278
|
+
type: "apply_patch";
|
|
279
|
+
};
|
|
280
|
+
type McpToolApprovalFilter = {
|
|
281
|
+
tool_names?: string[];
|
|
282
|
+
};
|
|
283
|
+
type McpToolApproval = {
|
|
284
|
+
never?: McpToolApprovalFilter;
|
|
285
|
+
always?: McpToolApprovalFilter;
|
|
286
|
+
};
|
|
287
|
+
type McpToolConfig = {
|
|
288
|
+
type: "mcp";
|
|
289
|
+
server_label: string;
|
|
290
|
+
server_url?: string;
|
|
291
|
+
server_description?: string;
|
|
292
|
+
connector_id?: string;
|
|
293
|
+
authorization?: string;
|
|
294
|
+
allowed_tools?: string[];
|
|
295
|
+
require_approval?: string | McpToolApproval;
|
|
296
|
+
};
|
|
297
|
+
type BuiltInToolConfig = OpenAIWebSearchToolConfig | FileSearchToolConfig | CodeInterpreterToolConfig | ImageGenerationToolConfig | McpToolConfig | ShellToolConfig | ApplyPatchToolConfig;
|
|
298
|
+
type FunctionTool = {
|
|
92
299
|
type: "function";
|
|
93
300
|
function: Function_;
|
|
94
301
|
};
|
|
95
|
-
type
|
|
302
|
+
type BuiltInTool = {
|
|
303
|
+
id: string;
|
|
96
304
|
name: string;
|
|
97
|
-
|
|
305
|
+
description: string;
|
|
306
|
+
provider: string;
|
|
307
|
+
type: "web_search" | "file_search" | "code_interpreter" | "image_generation" | "google_maps" | "url_context" | "mcp" | "bash" | "shell" | "apply_patch" | "text_editor";
|
|
308
|
+
config: BuiltInToolConfig;
|
|
98
309
|
};
|
|
310
|
+
type Tool = FunctionTool | BuiltInTool;
|
|
99
311
|
type SystemMessage = {
|
|
100
312
|
role: "system";
|
|
101
313
|
input_variables?: string[];
|
|
@@ -112,6 +324,7 @@ type UserMessage = {
|
|
|
112
324
|
};
|
|
113
325
|
type ToolCall = {
|
|
114
326
|
id: string;
|
|
327
|
+
tool_id?: string;
|
|
115
328
|
type: "function";
|
|
116
329
|
function: FunctionCall;
|
|
117
330
|
};
|
|
@@ -135,7 +348,7 @@ type ToolMessage = {
|
|
|
135
348
|
role: "tool";
|
|
136
349
|
input_variables?: string[];
|
|
137
350
|
template_format?: TemplateFormat;
|
|
138
|
-
content
|
|
351
|
+
content?: Content[];
|
|
139
352
|
tool_call_id: string;
|
|
140
353
|
name?: string;
|
|
141
354
|
};
|
|
@@ -177,8 +390,11 @@ type PromptTemplate = CompletionPromptTemplate | ChatPromptTemplate;
|
|
|
177
390
|
type Model = {
|
|
178
391
|
api_type?: string;
|
|
179
392
|
provider: string;
|
|
393
|
+
model_config_display_name?: string;
|
|
394
|
+
base_model?: string;
|
|
180
395
|
name: string;
|
|
181
396
|
parameters: Record<string, unknown>;
|
|
397
|
+
display_params?: Record<string, string | boolean | null>;
|
|
182
398
|
};
|
|
183
399
|
type Metadata = {
|
|
184
400
|
model?: Model;
|
|
@@ -191,6 +407,10 @@ type PromptBlueprint = {
|
|
|
191
407
|
prompt_template: PromptTemplate;
|
|
192
408
|
commit_message?: string;
|
|
193
409
|
metadata?: Metadata;
|
|
410
|
+
provider_base_url_name?: string;
|
|
411
|
+
report_id?: number;
|
|
412
|
+
inference_client_name?: string;
|
|
413
|
+
provider_id?: number;
|
|
194
414
|
};
|
|
195
415
|
type PublishPromptTemplate = BasePromptTemplate & PromptBlueprint & {
|
|
196
416
|
release_labels?: string[];
|