promptlayer 1.0.11 → 1.0.13

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/dist/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
- var Ne=Object.defineProperty,Oe=Object.defineProperties;var ke=Object.getOwnPropertyDescriptors;var Q=Object.getOwnPropertySymbols;var Ie=Object.prototype.hasOwnProperty,qe=Object.prototype.propertyIsEnumerable;var Z=(r,e)=>{if(e=Symbol[r])return e;throw Error("Symbol."+r+" is not defined")};var ee=(r,e,t)=>e in r?Ne(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,y=(r,e)=>{for(var t in e||(e={}))Ie.call(e,t)&&ee(r,t,e[t]);if(Q)for(var t of Q(e))qe.call(e,t)&&ee(r,t,e[t]);return r},R=(r,e)=>Oe(r,ke(e));var L=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(e,t)=>(typeof require!="undefined"?require:e)[t]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var c=(r,e,t)=>new Promise((o,n)=>{var a=i=>{try{p(t.next(i))}catch(u){n(u)}},s=i=>{try{p(t.throw(i))}catch(u){n(u)}},p=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,s);p((t=t.apply(r,e)).next())}),S=function(r,e){this[0]=r,this[1]=e},M=(r,e,t)=>{var o=(s,p,i,u)=>{try{var m=t[s](p),d=(p=m.value)instanceof S,f=m.done;Promise.resolve(d?p[0]:p).then(l=>d?o(s==="return"?s:"next",p[1]?{done:l.done,value:l.value}:l,i,u):i({value:l,done:f})).catch(l=>o("throw",l,i,u))}catch(l){u(l)}},n=s=>a[s]=p=>new Promise((i,u)=>o(s,p,i,u)),a={};return t=t.apply(r,e),a[Symbol.asyncIterator]=()=>a,n("next"),n("throw"),n("return"),a};var U=(r,e,t)=>(e=r[Z("asyncIterator")])?e.call(r):(r=r[Z("iterator")](),e={},t=(o,n)=>(n=r[o])&&(e[o]=a=>new Promise((s,p,i)=>(a=n.call(r,a),i=a.done,Promise.resolve(a.value).then(u=>s({value:u,done:i}),p)))),t("next"),t("return"),e);var g=process.env.URL_API_PROMPTLAYER||"https://api.promptlayer.com",te=(r,e)=>c(void 0,null,function*(){return e.request_response[Symbol.asyncIterator]!==void 0?Le(r,e.request_response,e):yield re(r,e)}),re=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),o=yield t.json();if(t.status!==200&&P(o,"WARNING: While logging your request, PromptLayer experienced the following error:"),o&&e.return_pl_id)return[e.request_response,o.request_id]}catch(t){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${t}`)}return e.request_response}),oe=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/library-track-metadata`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(R(y({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return P(o,"WARNING: While logging metadata to your request, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${t}`),!1}return!0}),ne=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/library-track-score`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(R(y({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return P(o,"WARNING: While scoring your request, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While scoring your request, PromptLayer experienced the following error: ${t}`),!1}return!0}),ae=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/library-track-prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(R(y({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return P(o,"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${t}`),!1}return!0}),se=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/track-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(R(y({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return P(o,"WARNING: While associating your request with a group, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While associating your request with a group, PromptLayer experienced the following error: ${t}`),!1}return!0}),ie=r=>c(void 0,null,function*(){try{let e=yield fetch(`${g}/create-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r})}),t=yield e.json();return e.status!==200?(P(t,"WARNING: While creating a group PromptLayer had the following error"),!1):t.id}catch(e){return console.warn(`WARNING: While creating a group PromptLayer had the following error: ${e}`),!1}}),pe=(r,e,t)=>c(void 0,null,function*(){try{let o=new URL(`${g}/prompt-templates/${e}`),n=yield fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify(t)}),a=yield n.json();return n.status!==200?(P(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):(a.warning&&console.warn(`WARNING: While tracking your prompt PromptLayer had the following error: ${a.warning}`),a)}catch(o){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${o}`),null}}),ce=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/rest/prompt-templates`,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify({prompt_template:y({},e),prompt_version:y({},e),release_labels:e.release_labels?e.release_labels:void 0})}),o=yield t.json();return t.status===400&&P(o,"WARNING: While publishing a prompt template PromptLayer had the following error"),o}catch(t){console.warn(`WARNING: While publishing a prompt template PromptLayer had the following error: ${t}`)}}),le=(r,e)=>c(void 0,null,function*(){var t;try{let o=new URL(`${g}/prompt-templates`);Object.entries(e||{}).forEach(([s,p])=>o.searchParams.append(s,p.toString()));let n=yield fetch(o,{headers:{"Content-Type":"application/json","X-API-KEY":r}}),a=yield n.json();return n.status!==200?(P(a,"WARNING: While fetching all prompt templates PromptLayer had the following error"),null):(t=a.items)!=null?t:[]}catch(o){return console.warn(`WARNING: While fetching all prompt templates PromptLayer had the following error: ${o}`),null}}),J=r=>{var s,p,i,u,m;let e=null,t,o={id:"",choices:[],created:Date.now(),model:"",object:"chat.completion"},n=r.at(-1);if(!n)return o;let a;for(let d of r){if(d.choices.length===0)continue;let f=d.choices[0].delta;f.content&&(e=`${e||""}${f.content||""}`),f.function_call&&(t={name:`${t?t.name:""}${f.function_call.name||""}`,arguments:`${t?t.arguments:""}${f.function_call.arguments||""}`});let l=(s=f.tool_calls)==null?void 0:s[0];if(l){a=a||[];let T=a.at(-1);if(!T||l.id){a.push({id:l.id||"",type:l.type||"function",function:{name:((p=l.function)==null?void 0:p.name)||"",arguments:((i=l.function)==null?void 0:i.arguments)||""}});continue}T.function.name=`${T.function.name}${((u=l.function)==null?void 0:u.name)||""}`,T.function.arguments=`${T.function.arguments}${((m=l.function)==null?void 0:m.arguments)||""}`}}return o.choices.push({finish_reason:r[0].choices[0].finish_reason||"stop",index:r[0].choices[0].index||0,logprobs:r[0].choices[0].logprobs||null,message:{role:"assistant",content:e,function_call:t||void 0,tool_calls:a||void 0}}),o.id=n.id,o.model=n.model,o.created=n.created,o.system_fingerprint=n.system_fingerprint,o.usage=n.usage,o},Y=r=>{let e={id:"",model:"",content:[],role:"assistant",type:"message",stop_reason:"stop_sequence",stop_sequence:null,usage:{input_tokens:0,output_tokens:0}};if(!r.at(-1))return e;let o="";for(let n of r)switch(n.type){case"message_start":{e=y({},n.message);break}case"content_block_delta":n.delta.type==="text_delta"&&(o=`${o}${n.delta.text}`);case"message_delta":"usage"in n&&(e.usage.output_tokens=n.usage.output_tokens),"stop_reason"in n.delta&&(e.stop_reason=n.delta.stop_reason);default:break}return e.content.push({type:"text",text:o}),e},Ee=(r,e="openai.chat.completions.create")=>{if("completion"in r[0])return r.reduce((t,o)=>R(y({},o),{completion:`${t.completion}${o.completion}`}),{});if(e==="anthropic.messages.create")return Y(r);if("text"in r[0].choices[0]){let t="";for(let n of r)t=`${t}${n.choices[0].text}`;let o=structuredClone(r.at(-1));return o.choices[0].text=t,o}if("delta"in r[0].choices[0]){let t=J(r);return t.choices[0]=y(y({},t.choices[0]),t.choices[0].message),t}return""};function Le(r,e,t){return M(this,null,function*(){let o=[];try{for(var s=U(e),p,i,u;p=!(i=yield new S(s.next())).done;p=!1){let m=i.value;yield t.return_pl_id?[m,null]:m,o.push(m)}}catch(i){u=[i]}finally{try{p&&(i=s.return)&&(yield new S(i.call(s)))}finally{if(u)throw u[0]}}let n=Ee(o,t.function_name),a=yield new S(re(r,R(y({},t),{request_response:n,request_end_time:new Date().toISOString()})));if(a&&t.return_pl_id){let m=a[1];yield[o.at(-1),m]}})}var P=(r,e)=>{try{console.warn(`${e}: ${r.message}`)}catch(t){console.warn(`${e}: ${r}`)}},ue=r=>c(void 0,null,function*(){try{let e=yield fetch(`${g}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return e.status!==200&&P(e,"WARNING: While logging your request, PromptLayer experienced the following error:"),e.json()}catch(e){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${e}`)}return{}}),me=r=>{let e={id:"",choices:[{finish_reason:"stop",index:0,text:"",logprobs:null}],created:Date.now(),model:"",object:"text_completion"},t=r.at(-1);if(!t)return e;let o="";for(let n of r)n.choices.length>0&&n.choices[0].text&&(o=`${o}${n.choices[0].text}`);return e.choices[0].text=o,e.id=t.id,e.created=t.created,e.model=t.model,e.system_fingerprint=t.system_fingerprint,e.usage=t.usage,e},he=r=>{let e={completion:"",id:"",model:"",stop_reason:"",type:"completion"},t=r.at(-1);if(!t)return e;let o="";for(let n of r)o=`${o}${n.completion}`;return e.completion=o,e.id=t.id,e.model=t.model,e.stop_reason=t.stop_reason,e};function de(r,e,t){return M(this,null,function*(){let o={request_id:null,raw_response:null,prompt_blueprint:null},n=[];try{for(var p=U(r),i,u,m;i=!(u=yield new S(p.next())).done;i=!1){let d=u.value;n.push(d),o.raw_response=d,yield o}}catch(u){m=[u]}finally{try{i&&(u=p.return)&&(yield new S(u.call(p)))}finally{if(m)throw m[0]}}let a=t(n),s=yield new S(e({request_response:a}));o.request_id=s.request_id,o.prompt_blueprint=s.prompt_blueprint,yield o})}var xe=(r,e)=>c(void 0,null,function*(){return r.chat.completions.create(e)}),$e=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),ve={chat:xe,completion:$e},fe=(r,e)=>c(void 0,null,function*(){let t=L("openai").default,o=new t({baseURL:e.baseURL}),n=ve[r.prompt_template.type];return n(o,e)}),We=(r,e)=>c(void 0,null,function*(){return r.messages.create(e)}),Ge=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),je={chat:We,completion:Ge},ye=(r,e)=>c(void 0,null,function*(){let t=L("@anthropic-ai/sdk").default,o=new t({baseURL:e.baseURL}),n=je[r.prompt_template.type];return n(o,e)}),ge=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/log-request`,{method:"POST",headers:{"X-API-KEY":r,"Content-Type":"application/json"},body:JSON.stringify(e)});return t.status!==201?(P(t,"WARNING: While logging your request PromptLayer had the following error"),null):t.json()}catch(t){return console.warn(`WARNING: While tracking your prompt PromptLayer had the following error: ${t}`),null}});var x=class{constructor(e){this.create=()=>ie(this.apiKey);this.apiKey=e}};import*as Pe from"@opentelemetry/api";import{SimpleSpanProcessor as Ke}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Me}from"@opentelemetry/sdk-trace-node";import{SpanKind as k,SpanStatusCode as D}from"@opentelemetry/api";import{ExportResultCode as $}from"@opentelemetry/core";var B=class{constructor(e,t){this.apiKey=t||process.env.PROMPTLAYER_API_KEY,this.enableTracing=e,this.url=`${g}/spans-bulk`}attributesToObject(e){return e?Object.fromEntries(Object.entries(e)):{}}spanKindToString(e){return{[k.INTERNAL]:"SpanKind.INTERNAL",[k.SERVER]:"SpanKind.SERVER",[k.CLIENT]:"SpanKind.CLIENT",[k.PRODUCER]:"SpanKind.PRODUCER",[k.CONSUMER]:"SpanKind.CONSUMER"}[e]||"SpanKind.INTERNAL"}statusCodeToString(e){return{[D.ERROR]:"StatusCode.ERROR",[D.OK]:"StatusCode.OK",[D.UNSET]:"StatusCode.UNSET"}[e]||"StatusCode.UNSET"}toNanoseconds(e){return(BigInt(e[0])*BigInt(1e9)+BigInt(e[1])).toString()}export(e){if(!this.enableTracing)return Promise.resolve($.SUCCESS);let t=e.map(o=>{var n;return{name:o.name,context:{trace_id:o.spanContext().traceId,span_id:o.spanContext().spanId,trace_state:((n=o.spanContext().traceState)==null?void 0:n.serialize())||""},kind:this.spanKindToString(o.kind),parent_id:o.parentSpanId||null,start_time:this.toNanoseconds(o.startTime),end_time:this.toNanoseconds(o.endTime),status:{status_code:this.statusCodeToString(o.status.code),description:o.status.message},attributes:this.attributesToObject(o.attributes),events:o.events.map(a=>({name:a.name,timestamp:this.toNanoseconds(a.time),attributes:this.attributesToObject(a.attributes)})),links:o.links.map(a=>({context:a.context,attributes:this.attributesToObject(a.attributes)})),resource:{attributes:R(y({},o.resource.attributes),{"service.name":"prompt-layer-js"}),schema_url:""}}});return fetch(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey||""},body:JSON.stringify({spans:t})}).then(o=>o.ok?$.SUCCESS:(console.error(`Error exporting spans
2
- HTTP error! status: ${o.status}`),$.FAILED)).catch(o=>(console.error("Error exporting spans:",o),$.FAILED))}shutdown(){return Promise.resolve()}},_e=B;var C=(r="promptlayer-tracer")=>Pe.trace.getTracer(r),Te=(r,e)=>{let t=new Me,o=new _e(r,e),n=new Ke(o);t.addSpanProcessor(n),t.register()};var Ue=C(),F=(r,e,t="",o="openai")=>{let n={construct:(a,s)=>{let p=Reflect.construct(a,s);return Object.defineProperties(p,{function_name:{value:t,writable:!0},provider:{value:o}}),new Proxy(p,n)},get:(a,s,p)=>{let i=a[s],u=`${Reflect.get(a,"function_name")}.${s.toString()}`;return typeof i=="object"?(Object.defineProperties(i,{function_name:{value:u,writable:!0},provider:{value:o}}),new Proxy(i,n)):typeof i=="function"?(...m)=>{var _,I,N,O;let d=new Date().toISOString(),f=Reflect.get(a,"provider"),l=(_=m[0])==null?void 0:_.return_pl_id,T=(I=m[0])==null?void 0:I.pl_tags;return(N=m[0])==null||delete N.return_pl_id,(O=m[0])==null||delete O.pl_tags,Ue.startActiveSpan(`${f}.${u}`,h=>c(void 0,null,function*(){try{h.setAttribute("function_input",JSON.stringify(m));let w=Reflect.apply(i,a,m),b=h.spanContext().spanId;return w instanceof Promise?new Promise((q,j)=>{w.then(A=>c(void 0,null,function*(){let E=yield te(r,{api_key:r,provider_type:f,function_name:u,request_start_time:d,request_end_time:new Date().toISOString(),request_response:A,kwargs:m[0],return_pl_id:l,tags:T,span_id:b});h.setAttribute("function_output",JSON.stringify(E)),h.setAttribute("response_status","success"),h.end(),q(E)})).catch(A=>{h.recordException(A),h.setAttribute("response_status","error"),h.end(),j(A)})}):(h.setAttribute("function_output",JSON.stringify(w)),h.setAttribute("response_status","success"),h.end(),w)}catch(w){throw h.recordException(w),h.setAttribute("response_status","error"),h.end(),w}}))}:Reflect.get(a,s,p)}};return new Proxy(e,n)};import*as v from"@opentelemetry/api";var Re=(r,e,t)=>function(...o){let n=C(),a=s=>{try{t&&Object.entries(t).forEach(([i,u])=>{s.setAttribute(i,u)}),s.setAttribute("function_input",JSON.stringify(o));let p=e(...o);return p instanceof Promise?p.then(i=>(s.setAttribute("function_output",JSON.stringify(i)),s.setStatus({code:v.SpanStatusCode.OK}),i)).catch(i=>{throw we(s,i,o),i}).finally(()=>s.end()):(s.setAttribute("function_output",JSON.stringify(p)),s.setStatus({code:v.SpanStatusCode.OK}),s.end(),p)}catch(p){throw we(s,p,o),p}};return n.startActiveSpan(r,a)},we=(r,e,t)=>{r.setAttribute("function_input",JSON.stringify(t)),r.setStatus({code:v.SpanStatusCode.ERROR,message:e instanceof Error?e.message:"Unknown error"}),r.end()};var W=class{constructor(e){this.get=(e,t)=>pe(this.apiKey,e,t);this.publish=e=>ce(this.apiKey,e);this.all=e=>le(this.apiKey,e);this.apiKey=e}};var Je=(r,e)=>{if(!(e.metadata instanceof Object))throw new Error("Please provide a dictionary of metadata.");for(let[t,o]of Object.entries(e.metadata))if(typeof t!="string"||typeof o!="string")throw new Error("Please provide a dictionary of metadata with key value pair of strings.");return oe(r,e)},Ye=(r,e)=>{if(typeof e.score!="number")throw new Error("Score must be a number");if(e.score<0||e.score>100)throw new Error("Score must be a number between 0 and 100.");return ne(r,e)},De=(r,e)=>{if(!(e.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return ae(r,e)},Be=(r,e)=>se(r,e),G=class{constructor(e){this.group=e=>Be(this.apiKey,e);this.metadata=e=>Je(this.apiKey,e);this.prompt=e=>De(this.apiKey,e);this.score=e=>Ye(this.apiKey,e);this.apiKey=e}};import*as be from"@opentelemetry/api";var Fe={openai:{chat:{function_name:"openai.chat.completions.create",stream_function:J},completion:{function_name:"openai.completions.create",stream_function:me}},anthropic:{chat:{function_name:"anthropic.messages.create",stream_function:Y},completion:{function_name:"anthropic.completions.create",stream_function:he}}},He={openai:fe,anthropic:ye},Se=class{constructor({apiKey:e=process.env.PROMPTLAYER_API_KEY,enableTracing:t=!1}={}){if(e===void 0)throw new Error("PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.");this.apiKey=e,this.enableTracing=t,this.templates=new W(e),this.group=new x(e),this.track=new G(e),this.wrapWithSpan=Re,t&&Te(t,e)}get Anthropic(){try{let e=L("@anthropic-ai/sdk").default;return F(this.apiKey,e,"anthropic","anthropic")}catch(e){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}get OpenAI(){try{let e=L("openai").default;return F(this.apiKey,e,"openai","openai")}catch(e){console.error("To use the OpenAI module, you must install the @openai/api package.")}}run(u){return c(this,arguments,function*({promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i=!1}){return C().startActiveSpan("PromptLayer Run",d=>c(this,null,function*(){try{let f={promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i};d.setAttribute("function_input",JSON.stringify(f));let l=n,T={label:o,version:t,metadata_filters:s};n&&(T.input_variables=n);let _=yield this.templates.get(e,T);if(!_)throw new Error("Prompt not found");let I=_.prompt_template;if(!_.llm_kwargs)throw new Error(`Prompt '${e}' does not have any LLM kwargs associated with it.`);let N=_.metadata;if(!N)throw new Error(`Prompt '${e}' does not have any metadata associated with it.`);let O=N.model;if(!O)throw new Error(`Prompt '${e}' does not have a model parameters associated with it.`);let h=O.provider,w=new Date().toISOString(),b=_.llm_kwargs,q=Fe[h][I.type],j=q.function_name,A=q.stream_function,E=He[h],H=_.provider_base_url;H&&(b.baseURL=H.url),b.stream=i,i&&h==="openai"&&(b.stream_options={include_usage:!0});let K=yield E(_,b),X=Ae=>{let Ce=new Date().toISOString();return ue(y({function_name:j,provider_type:h,args:[],kwargs:b,tags:a,request_start_time:w,request_end_time:Ce,api_key:this.apiKey,metadata:s,prompt_id:_.id,prompt_version:_.version,prompt_input_variables:l,group_id:p,return_prompt_blueprint:!0,span_id:d.spanContext().spanId},Ae))};if(i)return de(K,X,A);let z=yield X({request_response:K}),V={request_id:z.request_id,raw_response:K,prompt_blueprint:z.prompt_blueprint};return d.setAttribute("function_output",JSON.stringify(V)),V}catch(f){throw d.setStatus({code:be.SpanStatusCode.ERROR,message:f instanceof Error?f.message:"Unknown error"}),f}finally{d.end()}}))})}logRequest(e){return c(this,null,function*(){return ge(this.apiKey,e)})}};export{Se as PromptLayer};
1
+ var Ce=Object.defineProperty,qe=Object.defineProperties;var Ee=Object.getOwnPropertyDescriptors;var Z=Object.getOwnPropertySymbols;var Le=Object.prototype.hasOwnProperty,xe=Object.prototype.propertyIsEnumerable;var ee=(r,e)=>{if(e=Symbol[r])return e;throw Error("Symbol."+r+" is not defined")};var te=(r,e,t)=>e in r?Ce(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,h=(r,e)=>{for(var t in e||(e={}))Le.call(e,t)&&te(r,t,e[t]);if(Z)for(var t of Z(e))xe.call(e,t)&&te(r,t,e[t]);return r},S=(r,e)=>qe(r,Ee(e));var C=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(e,t)=>(typeof require!="undefined"?require:e)[t]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var c=(r,e,t)=>new Promise((o,n)=>{var a=i=>{try{p(t.next(i))}catch(m){n(m)}},s=i=>{try{p(t.throw(i))}catch(m){n(m)}},p=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,s);p((t=t.apply(r,e)).next())}),b=function(r,e){this[0]=r,this[1]=e},U=(r,e,t)=>{var o=(s,p,i,m)=>{try{var u=t[s](p),f=(p=u.value)instanceof b,w=u.done;Promise.resolve(f?p[0]:p).then(d=>f?o(s==="return"?s:"next",p[1]?{done:d.done,value:d.value}:d,i,m):i({value:d,done:w})).catch(d=>o("throw",d,i,m))}catch(d){m(d)}},n=s=>a[s]=p=>new Promise((i,m)=>o(s,p,i,m)),a={};return t=t.apply(r,e),a[Symbol.asyncIterator]=()=>a,n("next"),n("throw"),n("return"),a};var J=(r,e,t)=>(e=r[ee("asyncIterator")])?e.call(r):(r=r[ee("iterator")](),e={},t=(o,n)=>(n=r[o])&&(e[o]=a=>new Promise((s,p,i)=>(a=n.call(r,a),i=a.done,Promise.resolve(a.value).then(m=>s({value:m,done:i}),p)))),t("next"),t("return"),e);var _=process.env.URL_API_PROMPTLAYER||"https://api.promptlayer.com",re=(r,e)=>c(void 0,null,function*(){return e.request_response[Symbol.asyncIterator]!==void 0?We(r,e.request_response,e):yield oe(r,e)}),oe=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),o=yield t.json();if(t.status!==200&&R(o,"WARNING: While logging your request, PromptLayer experienced the following error:"),o&&e.return_pl_id)return[e.request_response,o.request_id]}catch(t){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${t}`)}return e.request_response}),ne=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/library-track-metadata`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S(h({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return R(o,"WARNING: While logging metadata to your request, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${t}`),!1}return!0}),ae=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/library-track-score`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S(h({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return R(o,"WARNING: While scoring your request, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While scoring your request, PromptLayer experienced the following error: ${t}`),!1}return!0}),se=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/library-track-prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S(h({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return R(o,"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${t}`),!1}return!0}),ie=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/track-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S(h({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return R(o,"WARNING: While associating your request with a group, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While associating your request with a group, PromptLayer experienced the following error: ${t}`),!1}return!0}),pe=r=>c(void 0,null,function*(){try{let e=yield fetch(`${_}/create-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r})}),t=yield e.json();return e.status!==200?(R(t,"WARNING: While creating a group PromptLayer had the following error"),!1):t.id}catch(e){return console.warn(`WARNING: While creating a group PromptLayer had the following error: ${e}`),!1}}),ce=(r,e,t)=>c(void 0,null,function*(){try{let o=new URL(`${_}/prompt-templates/${e}`),n=yield fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify(t)}),a=yield n.json();return n.status!==200?(R(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):(a.warning&&console.warn(`WARNING: While tracking your prompt PromptLayer had the following error: ${a.warning}`),a)}catch(o){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${o}`),null}}),le=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/rest/prompt-templates`,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify({prompt_template:h({},e),prompt_version:h({},e),release_labels:e.release_labels?e.release_labels:void 0})}),o=yield t.json();return t.status===400&&R(o,"WARNING: While publishing a prompt template PromptLayer had the following error"),o}catch(t){console.warn(`WARNING: While publishing a prompt template PromptLayer had the following error: ${t}`)}}),ue=(r,e)=>c(void 0,null,function*(){var t;try{let o=new URL(`${_}/prompt-templates`);Object.entries(e||{}).forEach(([s,p])=>o.searchParams.append(s,p.toString()));let n=yield fetch(o,{headers:{"Content-Type":"application/json","X-API-KEY":r}}),a=yield n.json();return n.status!==200?(R(a,"WARNING: While fetching all prompt templates PromptLayer had the following error"),null):(t=a.items)!=null?t:[]}catch(o){return console.warn(`WARNING: While fetching all prompt templates PromptLayer had the following error: ${o}`),null}}),me=s=>c(void 0,[s],function*({workflow_name:r,input_variables:e,metadata:t={},workflow_label_name:o=null,workflow_version_number:n=null,api_key:a}){let p={input_variables:e,metadata:t,workflow_label_name:o,workflow_version_number:n};try{let i=yield fetch(`${_}/workflows/${r}/run`,{method:"POST",headers:{"X-API-KEY":a,"Content-Type":"application/json"},body:JSON.stringify(p)});if(i.status!==201){let u=yield i.json().catch(()=>({}));throw new Error(`Failed to run workflow: ${u.error||i.statusText}`)}return yield i.json()}catch(i){throw console.error(`Failed to run workflow: ${i.message}`),i}}),x=r=>{var p,i,m,u,f,w,d,k,y;let e=null,t,o={id:"",choices:[],created:Date.now(),model:"",object:"chat.completion"},n=r.at(-1);if(!n)return o;let a;for(let A of r){if(A.choices.length===0)continue;let P=A.choices[0].delta;P.content&&(e=`${e||""}${P.content||""}`),P.function_call&&(t={name:`${t?t.name:""}${P.function_call.name||""}`,arguments:`${t?t.arguments:""}${P.function_call.arguments||""}`});let g=(p=P.tool_calls)==null?void 0:p[0];if(g){a=a||[];let l=a.at(-1);if(!l||g.id){a.push({id:g.id||"",type:g.type||"function",function:{name:((i=g.function)==null?void 0:i.name)||"",arguments:((m=g.function)==null?void 0:m.arguments)||""}});continue}l.function.name=`${l.function.name}${((u=g.function)==null?void 0:u.name)||""}`,l.function.arguments=`${l.function.arguments}${((f=g.function)==null?void 0:f.arguments)||""}`}}let s=r[0].choices.at(0);return o.choices.push({finish_reason:(w=s==null?void 0:s.finish_reason)!=null?w:"stop",index:(d=s==null?void 0:s.index)!=null?d:0,logprobs:(k=s==null?void 0:s.logprobs)!=null?k:null,message:{role:"assistant",content:e,function_call:t||void 0,tool_calls:a||void 0,refusal:(y=s==null?void 0:s.delta.refusal)!=null?y:null}}),o.id=n.id,o.model=n.model,o.created=n.created,o.system_fingerprint=n.system_fingerprint,o.usage=n.usage,o},Y=r=>{let e={id:"",model:"",content:[],role:"assistant",type:"message",stop_reason:"stop_sequence",stop_sequence:null,usage:{input_tokens:0,output_tokens:0}};if(!r.at(-1))return e;let o="";for(let n of r)switch(n.type){case"message_start":{e=h({},n.message);break}case"content_block_delta":n.delta.type==="text_delta"&&(o=`${o}${n.delta.text}`);case"message_delta":"usage"in n&&(e.usage.output_tokens=n.usage.output_tokens),"stop_reason"in n.delta&&(e.stop_reason=n.delta.stop_reason);default:break}return e.content.push({type:"text",text:o}),e},$e=(r,e="openai.chat.completions.create")=>{if("completion"in r[0])return r.reduce((t,o)=>S(h({},o),{completion:`${t.completion}${o.completion}`}),{});if(e==="anthropic.messages.create")return Y(r);if("text"in r[0].choices[0]){let t="";for(let n of r)t=`${t}${n.choices[0].text}`;let o=structuredClone(r.at(-1));return o.choices[0].text=t,o}if("delta"in r[0].choices[0]){let t=x(r);return t.choices[0]=h(h({},t.choices[0]),t.choices[0].message),t}return""};function We(r,e,t){return U(this,null,function*(){let o=[];try{for(var s=J(e),p,i,m;p=!(i=yield new b(s.next())).done;p=!1){let u=i.value;yield t.return_pl_id?[u,null]:u,o.push(u)}}catch(i){m=[i]}finally{try{p&&(i=s.return)&&(yield new b(i.call(s)))}finally{if(m)throw m[0]}}let n=$e(o,t.function_name),a=yield new b(oe(r,S(h({},t),{request_response:n,request_end_time:new Date().toISOString()})));if(a&&t.return_pl_id){let u=a[1];yield[o.at(-1),u]}})}var R=(r,e)=>{try{console.warn(`${e}: ${r.message}`)}catch(t){console.warn(`${e}: ${r}`)}},fe=r=>c(void 0,null,function*(){try{let e=yield fetch(`${_}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return e.status!==200&&R(e,"WARNING: While logging your request, PromptLayer experienced the following error:"),e.json()}catch(e){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${e}`)}return{}}),D=r=>{let e={id:"",choices:[{finish_reason:"stop",index:0,text:"",logprobs:null}],created:Date.now(),model:"",object:"text_completion"},t=r.at(-1);if(!t)return e;let o="";for(let n of r)n.choices.length>0&&n.choices[0].text&&(o=`${o}${n.choices[0].text}`);return e.choices[0].text=o,e.id=t.id,e.created=t.created,e.model=t.model,e.system_fingerprint=t.system_fingerprint,e.usage=t.usage,e},he=r=>{let e={completion:"",id:"",model:"",stop_reason:"",type:"completion"},t=r.at(-1);if(!t)return e;let o="";for(let n of r)o=`${o}${n.completion}`;return e.completion=o,e.id=t.id,e.model=t.model,e.stop_reason=t.stop_reason,e};function de(r,e,t){return U(this,null,function*(){let o={request_id:null,raw_response:null,prompt_blueprint:null},n=[];try{for(var p=J(r),i,m,u;i=!(m=yield new b(p.next())).done;i=!1){let f=m.value;n.push(f),o.raw_response=f,yield o}}catch(m){u=[m]}finally{try{i&&(m=p.return)&&(yield new b(m.call(p)))}finally{if(u)throw u[0]}}let a=t(n),s=yield new b(e({request_response:a}));o.request_id=s.request_id,o.prompt_blueprint=s.prompt_blueprint,yield o})}var ve=(r,e)=>c(void 0,null,function*(){return r.chat.completions.create(e)}),Ge=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),ye={chat:ve,completion:Ge},ge=(r,e)=>c(void 0,null,function*(){let t=C("openai").default,o=new t({baseURL:e.baseURL}),n=ye[r.prompt_template.type];return n(o,e)}),_e=(r,e)=>c(void 0,null,function*(){let t=C("openai").AzureOpenAI,o=new t({baseURL:e.baseURL}),n=ye[r.prompt_template.type];return n(o,e)}),je=(r,e)=>c(void 0,null,function*(){return r.messages.create(e)}),Ke=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),Me={chat:je,completion:Ke},we=(r,e)=>c(void 0,null,function*(){let t=C("@anthropic-ai/sdk").default,o=new t({baseURL:e.baseURL}),n=Me[r.prompt_template.type];return n(o,e)}),Pe=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/log-request`,{method:"POST",headers:{"X-API-KEY":r,"Content-Type":"application/json"},body:JSON.stringify(e)});return t.status!==201?(R(t,"WARNING: While logging your request PromptLayer had the following error"),null):t.json()}catch(t){return console.warn(`WARNING: While tracking your prompt PromptLayer had the following error: ${t}`),null}});var $=class{constructor(e){this.create=()=>pe(this.apiKey);this.apiKey=e}};import*as Te from"@opentelemetry/api";import{SimpleSpanProcessor as Ue}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Je}from"@opentelemetry/sdk-trace-node";import{SpanKind as q,SpanStatusCode as F}from"@opentelemetry/api";import{ExportResultCode as W}from"@opentelemetry/core";var z=class{constructor(e,t){this.apiKey=t||process.env.PROMPTLAYER_API_KEY,this.enableTracing=e,this.url=`${_}/spans-bulk`}attributesToObject(e){return e?Object.fromEntries(Object.entries(e)):{}}spanKindToString(e){return{[q.INTERNAL]:"SpanKind.INTERNAL",[q.SERVER]:"SpanKind.SERVER",[q.CLIENT]:"SpanKind.CLIENT",[q.PRODUCER]:"SpanKind.PRODUCER",[q.CONSUMER]:"SpanKind.CONSUMER"}[e]||"SpanKind.INTERNAL"}statusCodeToString(e){return{[F.ERROR]:"StatusCode.ERROR",[F.OK]:"StatusCode.OK",[F.UNSET]:"StatusCode.UNSET"}[e]||"StatusCode.UNSET"}toNanoseconds(e){return(BigInt(e[0])*BigInt(1e9)+BigInt(e[1])).toString()}export(e){if(!this.enableTracing)return Promise.resolve(W.SUCCESS);let t=e.map(o=>{var n;return{name:o.name,context:{trace_id:o.spanContext().traceId,span_id:o.spanContext().spanId,trace_state:((n=o.spanContext().traceState)==null?void 0:n.serialize())||""},kind:this.spanKindToString(o.kind),parent_id:o.parentSpanId||null,start_time:this.toNanoseconds(o.startTime),end_time:this.toNanoseconds(o.endTime),status:{status_code:this.statusCodeToString(o.status.code),description:o.status.message},attributes:this.attributesToObject(o.attributes),events:o.events.map(a=>({name:a.name,timestamp:this.toNanoseconds(a.time),attributes:this.attributesToObject(a.attributes)})),links:o.links.map(a=>({context:a.context,attributes:this.attributesToObject(a.attributes)})),resource:{attributes:S(h({},o.resource.attributes),{"service.name":"prompt-layer-js"}),schema_url:""}}});return fetch(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey||""},body:JSON.stringify({spans:t})}).then(o=>o.ok?W.SUCCESS:(console.error(`Error exporting spans
2
+ HTTP error! status: ${o.status}`),W.FAILED)).catch(o=>(console.error("Error exporting spans:",o),W.FAILED))}shutdown(){return Promise.resolve()}},Re=z;var I=(r="promptlayer-tracer")=>Te.trace.getTracer(r),Se=(r,e)=>{let t=new Je,o=new Re(r,e),n=new Ue(o);t.addSpanProcessor(n),t.register()};var Ye=I(),B=(r,e,t="",o="openai")=>{let n={construct:(a,s)=>{let p=Reflect.construct(a,s);return Object.defineProperties(p,{function_name:{value:t,writable:!0},provider:{value:o}}),new Proxy(p,n)},get:(a,s,p)=>{let i=a[s],m=`${Reflect.get(a,"function_name")}.${s.toString()}`;return typeof i=="object"?(Object.defineProperties(i,{function_name:{value:m,writable:!0},provider:{value:o}}),new Proxy(i,n)):typeof i=="function"?(...u)=>{var y,A,P,g;let f=new Date().toISOString(),w=Reflect.get(a,"provider"),d=(y=u[0])==null?void 0:y.return_pl_id,k=(A=u[0])==null?void 0:A.pl_tags;return(P=u[0])==null||delete P.return_pl_id,(g=u[0])==null||delete g.pl_tags,Ye.startActiveSpan(`${w}.${m}`,l=>c(void 0,null,function*(){try{l.setAttribute("function_input",JSON.stringify(u));let T=Reflect.apply(i,a,u),O=l.spanContext().spanId;return T instanceof Promise?new Promise((E,K)=>{T.then(N=>c(void 0,null,function*(){let L=yield re(r,{api_key:r,provider_type:w,function_name:m,request_start_time:f,request_end_time:new Date().toISOString(),request_response:N,kwargs:u[0],return_pl_id:d,tags:k,span_id:O});l.setAttribute("function_output",JSON.stringify(L)),l.setAttribute("response_status","success"),l.end(),E(L)})).catch(N=>{l.recordException(N),l.setAttribute("response_status","error"),l.end(),K(N)})}):(l.setAttribute("function_output",JSON.stringify(T)),l.setAttribute("response_status","success"),l.end(),T)}catch(T){throw l.recordException(T),l.setAttribute("response_status","error"),l.end(),T}}))}:Reflect.get(a,s,p)}};return new Proxy(e,n)};import*as v from"@opentelemetry/api";var ke=(r,e,t)=>function(...o){let n=I(),a=s=>{try{t&&Object.entries(t).forEach(([i,m])=>{s.setAttribute(i,m)}),s.setAttribute("function_input",JSON.stringify(o));let p=e(...o);return p instanceof Promise?p.then(i=>(s.setAttribute("function_output",JSON.stringify(i)),s.setStatus({code:v.SpanStatusCode.OK}),i)).catch(i=>{throw be(s,i,o),i}).finally(()=>s.end()):(s.setAttribute("function_output",JSON.stringify(p)),s.setStatus({code:v.SpanStatusCode.OK}),s.end(),p)}catch(p){throw be(s,p,o),p}};return n.startActiveSpan(r,a)},be=(r,e,t)=>{r.setAttribute("function_input",JSON.stringify(t)),r.setStatus({code:v.SpanStatusCode.ERROR,message:e instanceof Error?e.message:"Unknown error"}),r.end()};var G=class{constructor(e){this.get=(e,t)=>ce(this.apiKey,e,t);this.publish=e=>le(this.apiKey,e);this.all=e=>ue(this.apiKey,e);this.apiKey=e}};var De=(r,e)=>{if(!(e.metadata instanceof Object))throw new Error("Please provide a dictionary of metadata.");for(let[t,o]of Object.entries(e.metadata))if(typeof t!="string"||typeof o!="string")throw new Error("Please provide a dictionary of metadata with key value pair of strings.");return ne(r,e)},Fe=(r,e)=>{if(typeof e.score!="number")throw new Error("Score must be a number");if(e.score<0||e.score>100)throw new Error("Score must be a number between 0 and 100.");return ae(r,e)},ze=(r,e)=>{if(!(e.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return se(r,e)},Be=(r,e)=>ie(r,e),j=class{constructor(e){this.group=e=>Be(this.apiKey,e);this.metadata=e=>De(this.apiKey,e);this.prompt=e=>ze(this.apiKey,e);this.score=e=>Fe(this.apiKey,e);this.apiKey=e}};import*as Oe from"@opentelemetry/api";var Xe={openai:{chat:{function_name:"openai.chat.completions.create",stream_function:x},completion:{function_name:"openai.completions.create",stream_function:D}},anthropic:{chat:{function_name:"anthropic.messages.create",stream_function:Y},completion:{function_name:"anthropic.completions.create",stream_function:he}},"openai.azure":{chat:{function_name:"openai.AzureOpenAI.chat.completions.create",stream_function:x},completion:{function_name:"openai.AzureOpenAI.completions.create",stream_function:D}}},He={openai:ge,anthropic:we,"openai.azure":_e},Ae=class{constructor({apiKey:e=process.env.PROMPTLAYER_API_KEY,enableTracing:t=!1}={}){if(e===void 0)throw new Error("PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.");this.apiKey=e,this.enableTracing=t,this.templates=new G(e),this.group=new $(e),this.track=new j(e),this.wrapWithSpan=ke,t&&Se(t,e)}get Anthropic(){try{let e=C("@anthropic-ai/sdk").default;return B(this.apiKey,e,"anthropic","anthropic")}catch(e){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}get OpenAI(){try{let e=C("openai").default;return B(this.apiKey,e,"openai","openai")}catch(e){console.error("To use the OpenAI module, you must install the @openai/api package.")}}run(m){return c(this,arguments,function*({promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i=!1}){return I().startActiveSpan("PromptLayer Run",f=>c(this,null,function*(){try{let w={promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i};f.setAttribute("function_input",JSON.stringify(w));let d=n,k={label:o,version:t,metadata_filters:s};n&&(k.input_variables=n);let y=yield this.templates.get(e,k);if(!y)throw new Error("Prompt not found");let A=y.prompt_template;if(!y.llm_kwargs)throw new Error(`Prompt '${e}' does not have any LLM kwargs associated with it.`);let P=y.metadata;if(!P)throw new Error(`Prompt '${e}' does not have any metadata associated with it.`);let g=P.model;if(!g)throw new Error(`Prompt '${e}' does not have a model parameters associated with it.`);let l=g.provider,T=new Date().toISOString(),O=y.llm_kwargs,E=Xe[l][A.type],K=E.function_name,N=E.stream_function,L=He[l],X=y.provider_base_url;X&&(O.baseURL=X.url),O.stream=i,i&&["openai","openai.azure"].includes(l)&&(O.stream_options={include_usage:!0});let M=yield L(y,O),H=Ne=>{let Ie=new Date().toISOString();return fe(h({function_name:K,provider_type:l,args:[],kwargs:O,tags:a,request_start_time:T,request_end_time:Ie,api_key:this.apiKey,metadata:s,prompt_id:y.id,prompt_version:y.version,prompt_input_variables:d,group_id:p,return_prompt_blueprint:!0,span_id:f.spanContext().spanId},Ne))};if(i)return de(M,H,N);let V=yield H({request_response:M}),Q={request_id:V.request_id,raw_response:M,prompt_blueprint:V.prompt_blueprint};return f.setAttribute("function_output",JSON.stringify(Q)),Q}catch(w){throw f.setStatus({code:Oe.SpanStatusCode.ERROR,message:w instanceof Error?w.message:"Unknown error"}),w}finally{f.end()}}))})}runWorkflow(s){return c(this,arguments,function*({workflowName:e,inputVariables:t={},metadata:o={},workflowLabelName:n=null,workflowVersionNumber:a=null}){try{return yield me({workflow_name:e,input_variables:t,metadata:o,workflow_label_name:n,workflow_version_number:a,api_key:this.apiKey})}catch(p){throw p instanceof Error?(console.error("Error running workflow:",p.message),new Error(`Error running workflow: ${p.message}`)):(console.error("Unknown error running workflow:",p),new Error("Unknown error running workflow"))}})}logRequest(e){return c(this,null,function*(){return Pe(this.apiKey,e)})}};export{Ae as PromptLayer};
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils.ts","../../src/groups.ts","../../src/tracing.ts","../../src/span-exporter.ts","../../src/promptlayer.ts","../../src/span-wrapper.ts","../../src/templates.ts","../../src/track.ts","../../src/index.ts"],"sourcesContent":["import {\n GetPromptTemplateParams,\n GetPromptTemplateResponse,\n ListPromptTemplatesResponse,\n LogRequest,\n Pagination,\n PublishPromptTemplate,\n PublishPromptTemplateResponse,\n RequestLog,\n TrackGroup,\n TrackMetadata,\n TrackPrompt,\n TrackRequest,\n TrackScore,\n} from \"@/types\";\nimport type TypeAnthropic from \"@anthropic-ai/sdk\";\nimport {\n Completion as AnthropicCompletion,\n Message,\n MessageStreamEvent,\n} from \"@anthropic-ai/sdk/resources\";\nimport type TypeOpenAI from \"openai\";\nimport {\n ChatCompletion,\n ChatCompletionChunk,\n Completion,\n} from \"openai/resources\";\n\nexport const URL_API_PROMPTLAYER =\n process.env.URL_API_PROMPTLAYER || \"https://api.promptlayer.com\";\n\nconst promptlayerApiHandler = async <Item>(\n apiKey: string,\n body: TrackRequest & {\n request_response: AsyncIterable<Item> | any;\n }\n) => {\n const isGenerator = body.request_response[Symbol.asyncIterator] !== undefined;\n if (isGenerator) {\n return proxyGenerator(apiKey, body.request_response, body);\n }\n return await promptLayerApiRequest(apiKey, body);\n};\n\nconst promptLayerApiRequest = async (apiKey: string, body: TrackRequest) => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-request`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While logging your request, PromptLayer experienced the following error:\"\n );\n }\n if (data && body.return_pl_id) {\n return [body.request_response, data.request_id];\n }\n } catch (e) {\n console.warn(\n `WARNING: While logging your request PromptLayer had the following error: ${e}`\n );\n }\n return body.request_response;\n};\n\nconst promptLayerTrackMetadata = async (\n apiKey: string,\n body: TrackMetadata\n): Promise<boolean> => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/library-track-metadata`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n }\n );\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While logging metadata to your request, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackScore = async (\n apiKey: string,\n body: TrackScore\n): Promise<boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/library-track-score`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While scoring your request, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While scoring your request, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackPrompt = async (\n apiKey: string,\n body: TrackPrompt\n): Promise<boolean> => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/library-track-prompt`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n }\n );\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackGroup = async (\n apiKey: string,\n body: TrackGroup\n): Promise<boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-group`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While associating your request with a group, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While associating your request with a group, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerCreateGroup = async (\n apiKey: string\n): Promise<number | boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/create-group`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While creating a group PromptLayer had the following error\"\n );\n return false;\n }\n return data.id;\n } catch (e) {\n console.warn(\n `WARNING: While creating a group PromptLayer had the following error: ${e}`\n );\n return false;\n }\n};\n\nconst getPromptTemplate = async (\n apiKey: string,\n promptName: string,\n params?: Partial<GetPromptTemplateParams>\n) => {\n try {\n const url = new URL(\n `${URL_API_PROMPTLAYER}/prompt-templates/${promptName}`\n );\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n body: JSON.stringify(params),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While fetching a prompt template PromptLayer had the following error\"\n );\n return null;\n }\n if(data.warning){\n console.warn(\n `WARNING: While tracking your prompt PromptLayer had the following error: ${data.warning}`\n );\n }\n return data as Promise<GetPromptTemplateResponse>;\n } catch (e) {\n console.warn(\n `WARNING: While fetching a prompt template PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nconst publishPromptTemplate = async (\n apiKey: string,\n body: PublishPromptTemplate\n) => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/rest/prompt-templates`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n body: JSON.stringify({\n prompt_template: { ...body },\n prompt_version: { ...body },\n release_labels: body.release_labels ? body.release_labels : undefined,\n }),\n }\n );\n const data = await response.json();\n if (response.status === 400) {\n warnOnBadResponse(\n data,\n \"WARNING: While publishing a prompt template PromptLayer had the following error\"\n );\n }\n return data as Promise<PublishPromptTemplateResponse>;\n } catch (e) {\n console.warn(\n `WARNING: While publishing a prompt template PromptLayer had the following error: ${e}`\n );\n }\n};\n\nconst getAllPromptTemplates = async (\n apiKey: string,\n params?: Partial<Pagination>\n) => {\n try {\n const url = new URL(`${URL_API_PROMPTLAYER}/prompt-templates`);\n Object.entries(params || {}).forEach(([key, value]) =>\n url.searchParams.append(key, value.toString())\n );\n const response = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While fetching all prompt templates PromptLayer had the following error\"\n );\n return null;\n }\n return (data.items ?? []) as Promise<Array<ListPromptTemplatesResponse>>;\n } catch (e) {\n console.warn(\n `WARNING: While fetching all prompt templates PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nconst openaiStreamChat = (results: ChatCompletionChunk[]): ChatCompletion => {\n let content: ChatCompletion.Choice[\"message\"][\"content\"] = null;\n let functionCall: ChatCompletion.Choice[\"message\"][\"function_call\"] =\n undefined;\n const response: ChatCompletion = {\n id: \"\",\n choices: [],\n created: Date.now(),\n model: \"\",\n object: \"chat.completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let toolCalls: ChatCompletion.Choice[\"message\"][\"tool_calls\"] = undefined;\n for (const result of results) {\n if (result.choices.length === 0) continue;\n const delta = result.choices[0].delta;\n\n if (delta.content) {\n content = `${content || \"\"}${delta.content || \"\"}`;\n }\n if (delta.function_call) {\n functionCall = {\n name: `${functionCall ? functionCall.name : \"\"}${\n delta.function_call.name || \"\"\n }`,\n arguments: `${functionCall ? functionCall.arguments : \"\"}${\n delta.function_call.arguments || \"\"\n }`,\n };\n }\n const toolCall = delta.tool_calls?.[0];\n if (toolCall) {\n toolCalls = toolCalls || [];\n const lastToolCall = toolCalls.at(-1);\n if (!lastToolCall || toolCall.id) {\n toolCalls.push({\n id: toolCall.id || \"\",\n type: toolCall.type || \"function\",\n function: {\n name: toolCall.function?.name || \"\",\n arguments: toolCall.function?.arguments || \"\",\n },\n });\n continue;\n }\n lastToolCall.function.name = `${lastToolCall.function.name}${\n toolCall.function?.name || \"\"\n }`;\n lastToolCall.function.arguments = `${lastToolCall.function.arguments}${\n toolCall.function?.arguments || \"\"\n }`;\n }\n }\n response.choices.push({\n finish_reason: results[0].choices[0].finish_reason || \"stop\",\n index: results[0].choices[0].index || 0,\n logprobs: results[0].choices[0].logprobs || null,\n message: {\n role: \"assistant\",\n content,\n function_call: functionCall ? functionCall : undefined,\n tool_calls: toolCalls ? toolCalls : undefined,\n },\n });\n response.id = lastResult.id;\n response.model = lastResult.model;\n response.created = lastResult.created;\n response.system_fingerprint = lastResult.system_fingerprint;\n response.usage = lastResult.usage;\n return response;\n};\n\nconst anthropicStreamMessage = (results: MessageStreamEvent[]): Message => {\n let response: Message = {\n id: \"\",\n model: \"\",\n content: [],\n role: \"assistant\",\n type: \"message\",\n stop_reason: \"stop_sequence\",\n stop_sequence: null,\n usage: {\n input_tokens: 0,\n output_tokens: 0,\n },\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let content = \"\";\n for (const result of results) {\n switch (result.type) {\n case \"message_start\": {\n response = {\n ...result.message,\n };\n break;\n }\n case \"content_block_delta\": {\n if (result.delta.type === \"text_delta\")\n content = `${content}${result.delta.text}`;\n }\n case \"message_delta\": {\n if (\"usage\" in result)\n response.usage.output_tokens = result.usage.output_tokens;\n if (\"stop_reason\" in result.delta)\n response.stop_reason = result.delta.stop_reason;\n }\n default: {\n break;\n }\n }\n }\n response.content.push({\n type: \"text\",\n text: content,\n });\n return response;\n};\n\nconst cleaned_result = (\n results: any[],\n function_name = \"openai.chat.completions.create\"\n) => {\n if (\"completion\" in results[0]) {\n return results.reduce(\n (prev, current) => ({\n ...current,\n completion: `${prev.completion}${current.completion}`,\n }),\n {}\n );\n }\n\n if (function_name === \"anthropic.messages.create\")\n return anthropicStreamMessage(results);\n\n if (\"text\" in results[0].choices[0]) {\n let response = \"\";\n for (const result of results) {\n response = `${response}${result.choices[0].text}`;\n }\n const final_result = structuredClone(results.at(-1));\n final_result.choices[0].text = response;\n return final_result;\n }\n\n if (\"delta\" in results[0].choices[0]) {\n const response = openaiStreamChat(results);\n response.choices[0] = {\n ...response.choices[0],\n ...response.choices[0].message,\n };\n return response;\n }\n\n return \"\";\n};\n\nasync function* proxyGenerator<Item>(\n apiKey: string,\n generator: AsyncIterable<Item>,\n body: TrackRequest\n) {\n const results = [];\n for await (const value of generator) {\n yield body.return_pl_id ? [value, null] : value;\n results.push(value);\n }\n const request_response = cleaned_result(results, body.function_name);\n const response = await promptLayerApiRequest(apiKey, {\n ...body,\n request_response,\n request_end_time: new Date().toISOString(),\n });\n if (response) {\n if (body.return_pl_id) {\n const request_id = (response as any)[1];\n const lastResult = results.at(-1);\n yield [lastResult, request_id];\n }\n }\n}\n\nconst warnOnBadResponse = (request_response: any, main_message: string) => {\n try {\n console.warn(`${main_message}: ${request_response.message}`);\n } catch (e) {\n console.warn(`${main_message}: ${request_response}`);\n }\n};\n\nconst trackRequest = async (body: TrackRequest) => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-request`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (response.status !== 200)\n warnOnBadResponse(\n response,\n \"WARNING: While logging your request, PromptLayer experienced the following error:\"\n );\n return response.json();\n } catch (e) {\n console.warn(\n `WARNING: While logging your request PromptLayer had the following error: ${e}`\n );\n }\n return {};\n};\n\nconst openaiStreamCompletion = (results: Completion[]) => {\n const response: Completion = {\n id: \"\",\n choices: [\n {\n finish_reason: \"stop\",\n index: 0,\n text: \"\",\n logprobs: null,\n },\n ],\n created: Date.now(),\n model: \"\",\n object: \"text_completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let text = \"\";\n for (const result of results) {\n if (result.choices.length > 0 && result.choices[0].text) {\n text = `${text}${result.choices[0].text}`;\n }\n }\n response.choices[0].text = text;\n response.id = lastResult.id;\n response.created = lastResult.created;\n response.model = lastResult.model;\n response.system_fingerprint = lastResult.system_fingerprint;\n response.usage = lastResult.usage;\n return response;\n};\n\nconst anthropicStreamCompletion = (results: AnthropicCompletion[]) => {\n const response: AnthropicCompletion = {\n completion: \"\",\n id: \"\",\n model: \"\",\n stop_reason: \"\",\n type: \"completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let completion = \"\";\n for (const result of results) {\n completion = `${completion}${result.completion}`;\n }\n response.completion = completion;\n response.id = lastResult.id;\n response.model = lastResult.model;\n response.stop_reason = lastResult.stop_reason;\n return response;\n};\n\nasync function* streamResponse<Item>(\n generator: AsyncIterable<Item>,\n afterStream: (body: object) => any,\n mapResults: any\n) {\n const data: {\n request_id: number | null;\n raw_response: any;\n prompt_blueprint: any;\n } = {\n request_id: null,\n raw_response: null,\n prompt_blueprint: null,\n };\n const results = [];\n for await (const result of generator) {\n results.push(result);\n data.raw_response = result;\n yield data;\n }\n const request_response = mapResults(results);\n const response = await afterStream({ request_response });\n data.request_id = response.request_id;\n data.prompt_blueprint = response.prompt_blueprint;\n yield data;\n}\n\nconst openaiChatRequest = async (client: TypeOpenAI, kwargs: any) => {\n return client.chat.completions.create(kwargs);\n};\n\nconst openaiCompletionsRequest = async (client: TypeOpenAI, kwargs: any) => {\n return client.completions.create(kwargs);\n};\n\nconst MAP_TYPE_TO_OPENAI_FUNCTION = {\n chat: openaiChatRequest,\n completion: openaiCompletionsRequest,\n};\n\nconst openaiRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const OpenAI = require(\"openai\").default;\n const client = new OpenAI({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_OPENAI_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst anthropicChatRequest = async (client: TypeAnthropic, kwargs: any) => {\n return client.messages.create(kwargs);\n};\n\nconst anthropicCompletionsRequest = async (\n client: TypeAnthropic,\n kwargs: any\n) => {\n return client.completions.create(kwargs);\n};\n\nconst MAP_TYPE_TO_ANTHROPIC_FUNCTION = {\n chat: anthropicChatRequest,\n completion: anthropicCompletionsRequest,\n};\n\nconst anthropicRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const Anthropic = require(\"@anthropic-ai/sdk\").default;\n const client = new Anthropic({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_ANTHROPIC_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst utilLogRequest = async (\n apiKey: string,\n body: LogRequest\n): Promise<RequestLog | null> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/log-request`, {\n method: \"POST\",\n headers: {\n \"X-API-KEY\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (response.status !== 201) {\n warnOnBadResponse(\n response,\n \"WARNING: While logging your request PromptLayer had the following error\"\n );\n return null;\n }\n return response.json();\n } catch (e) {\n console.warn(\n `WARNING: While tracking your prompt PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nexport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n getAllPromptTemplates,\n getPromptTemplate,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n promptlayerApiHandler,\n promptLayerApiRequest,\n promptLayerCreateGroup,\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n publishPromptTemplate,\n streamResponse,\n trackRequest,\n utilLogRequest,\n};\n","import { promptLayerCreateGroup } from \"@/utils\";\n\nexport class GroupManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n create = () => promptLayerCreateGroup(this.apiKey);\n}\n","import * as opentelemetry from '@opentelemetry/api';\nimport {SimpleSpanProcessor} from '@opentelemetry/sdk-trace-base';\nimport {NodeTracerProvider} from '@opentelemetry/sdk-trace-node';\nimport PromptLayerSpanExporter from '@/span-exporter';\n\nexport const getTracer = (name: string = 'promptlayer-tracer') => {\n return opentelemetry.trace.getTracer(name);\n}\n\nexport const setupTracing = (enableTracing: boolean, apiKey?: string) => {\n const provider = new NodeTracerProvider();\n const exporter = new PromptLayerSpanExporter(enableTracing, apiKey);\n const processor = new SimpleSpanProcessor(exporter);\n provider.addSpanProcessor(processor);\n provider.register();\n}\n","import {Attributes, SpanKind, SpanStatusCode} from '@opentelemetry/api';\nimport {ReadableSpan, SpanExporter} from '@opentelemetry/sdk-trace-base';\nimport {ExportResultCode} from '@opentelemetry/core';\nimport {URL_API_PROMPTLAYER} from '@/utils';\n\nclass PromptLayerSpanExporter implements SpanExporter {\n private apiKey: string | undefined;\n private enableTracing: boolean;\n private url: string;\n\n constructor(enableTracing: boolean, apiKey?: string) {\n this.apiKey = apiKey || process.env.PROMPTLAYER_API_KEY;\n this.enableTracing = enableTracing;\n this.url = `${URL_API_PROMPTLAYER}/spans-bulk`;\n }\n\n private attributesToObject(attributes: Attributes | undefined): Record<string, any> {\n if (!attributes) return {};\n return Object.fromEntries(Object.entries(attributes));\n }\n\n private spanKindToString(kind: SpanKind): string {\n const kindMap: Record<SpanKind, string> = {\n [SpanKind.INTERNAL]: 'SpanKind.INTERNAL',\n [SpanKind.SERVER]: 'SpanKind.SERVER',\n [SpanKind.CLIENT]: 'SpanKind.CLIENT',\n [SpanKind.PRODUCER]: 'SpanKind.PRODUCER',\n [SpanKind.CONSUMER]: 'SpanKind.CONSUMER',\n };\n return kindMap[kind] || 'SpanKind.INTERNAL';\n }\n\n private statusCodeToString(code: SpanStatusCode): string {\n const statusMap: Record<SpanStatusCode, string> = {\n [SpanStatusCode.ERROR]: 'StatusCode.ERROR',\n [SpanStatusCode.OK]: 'StatusCode.OK',\n [SpanStatusCode.UNSET]: 'StatusCode.UNSET',\n };\n return statusMap[code] || 'StatusCode.UNSET';\n }\n\n private toNanoseconds(time: [number, number]): string {\n return (BigInt(time[0]) * BigInt(1e9) + BigInt(time[1])).toString();\n };\n\n export(spans: ReadableSpan[]): Promise<ExportResultCode> {\n if (!this.enableTracing) {\n return Promise.resolve(ExportResultCode.SUCCESS);\n }\n\n const requestData = spans.map(span => ({\n name: span.name,\n context: {\n trace_id: span.spanContext().traceId,\n span_id: span.spanContext().spanId,\n trace_state: span.spanContext().traceState?.serialize() || '',\n },\n kind: this.spanKindToString(span.kind),\n parent_id: span.parentSpanId || null,\n start_time: this.toNanoseconds(span.startTime),\n end_time: this.toNanoseconds(span.endTime),\n status: {\n status_code: this.statusCodeToString(span.status.code),\n description: span.status.message,\n },\n attributes: this.attributesToObject(span.attributes),\n events: span.events.map(event => ({\n name: event.name,\n timestamp: this.toNanoseconds(event.time),\n attributes: this.attributesToObject(event.attributes),\n })),\n links: span.links.map(link => ({\n context: link.context,\n attributes: this.attributesToObject(link.attributes),\n })),\n resource: {\n attributes: {\n ...span.resource.attributes,\n \"service.name\": \"prompt-layer-js\",\n },\n schema_url: '',\n },\n }));\n\n return fetch(this.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-KEY': this.apiKey || '',\n },\n body: JSON.stringify({\n spans: requestData,\n }),\n })\n .then(response => {\n if (!response.ok) {\n console.error(`Error exporting spans\\nHTTP error! status: ${response.status}`);\n return ExportResultCode.FAILED;\n }\n return ExportResultCode.SUCCESS;\n })\n .catch((error) => {\n console.error('Error exporting spans:', error);\n return ExportResultCode.FAILED;\n });\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nexport default PromptLayerSpanExporter;\n","import {getTracer} from \"@/tracing\";\nimport {promptlayerApiHandler} from \"@/utils\";\n\nconst tracer = getTracer();\n\nexport const promptLayerBase = (\n apiKey: string,\n llm: object,\n function_name = \"\",\n provider = \"openai\"\n) => {\n const handler: ProxyHandler<any> = {\n construct: (target, args) => {\n const newTarget = Reflect.construct(target, args);\n Object.defineProperties(newTarget, {\n function_name: {\n value: function_name,\n writable: true,\n },\n provider: {\n value: provider,\n },\n });\n return new Proxy(newTarget, handler);\n },\n get: (target, prop, receiver) => {\n const value = target[prop];\n const function_name = `${Reflect.get(\n target,\n \"function_name\"\n )}.${prop.toString()}`;\n\n if (typeof value === \"object\") {\n Object.defineProperties(value, {\n function_name: {\n value: function_name,\n writable: true,\n },\n provider: {\n value: provider,\n },\n });\n return new Proxy(value, handler);\n }\n\n if (typeof value === \"function\") {\n return (...args: any[]) => {\n const request_start_time = new Date().toISOString();\n const provider_type = Reflect.get(target, \"provider\");\n const return_pl_id = args[0]?.return_pl_id;\n const pl_tags = args[0]?.pl_tags;\n delete args[0]?.return_pl_id;\n delete args[0]?.pl_tags;\n\n return tracer.startActiveSpan(`${provider_type}.${function_name}`, async (span: any) => {\n try {\n span.setAttribute('function_input', JSON.stringify(args));\n const response = Reflect.apply(value, target, args);\n const spanId = span.spanContext().spanId;\n\n if (response instanceof Promise) {\n return new Promise((resolve, reject) => {\n response\n .then(async (request_response) => {\n const response = await promptlayerApiHandler(apiKey, {\n api_key: apiKey,\n provider_type,\n function_name,\n request_start_time,\n request_end_time: new Date().toISOString(),\n request_response,\n kwargs: args[0],\n return_pl_id,\n tags: pl_tags,\n span_id: spanId,\n });\n\n span.setAttribute('function_output', JSON.stringify(response));\n span.setAttribute('response_status', 'success');\n span.end();\n resolve(response);\n })\n .catch((error) => {\n span.recordException(error);\n span.setAttribute('response_status', 'error');\n span.end();\n reject(error);\n });\n });\n }\n\n span.setAttribute('function_output', JSON.stringify(response));\n span.setAttribute('response_status', 'success');\n span.end();\n return response;\n } catch (error) {\n span.recordException(error);\n span.setAttribute('response_status', 'error');\n span.end();\n throw error;\n }\n });\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n };\n\n return new Proxy(llm, handler);\n};\n","import * as opentelemetry from '@opentelemetry/api';\nimport { getTracer } from '@/tracing';\n\nexport const wrapWithSpan = (functionName: string, func: Function, attributes?: Record<string, any>) => {\n return function (...args: any[]) {\n const tracer = getTracer();\n\n const wrapperFunction = (span: opentelemetry.Span) => {\n try {\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n span.setAttribute(key, value);\n });\n }\n\n span.setAttribute('function_input', JSON.stringify(args));\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result.then((resolvedResult) => {\n span.setAttribute('function_output', JSON.stringify(resolvedResult));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n return resolvedResult;\n }).catch((error) => {\n handleError(span, error, args);\n throw error;\n }).finally(() => span.end());\n } else {\n span.setAttribute('function_output', JSON.stringify(result));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n handleError(span, error, args);\n throw error;\n }\n };\n\n return tracer.startActiveSpan(functionName, wrapperFunction);\n };\n};\n\nconst handleError = (span: opentelemetry.Span, error: any, args: any[]) => {\n span.setAttribute('function_input', JSON.stringify(args));\n span.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n span.end();\n}\n","import {\n GetPromptTemplateParams,\n Pagination,\n PublishPromptTemplate,\n} from \"@/types\";\nimport {\n getAllPromptTemplates,\n getPromptTemplate,\n publishPromptTemplate,\n} from \"@/utils\";\n\nexport class TemplateManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n get = (promptName: string, params?: Partial<GetPromptTemplateParams>) =>\n getPromptTemplate(this.apiKey, promptName, params);\n\n publish = (body: PublishPromptTemplate) =>\n publishPromptTemplate(this.apiKey, body);\n\n all = (params?: Pagination) => getAllPromptTemplates(this.apiKey, params);\n}\n","import { TrackGroup, TrackMetadata, TrackPrompt, TrackScore } from \"@/types\";\nimport {\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n} from \"@/utils\";\n\nconst metadata = (apiKey: string, body: TrackMetadata): Promise<boolean> => {\n if (!(body.metadata instanceof Object)) {\n throw new Error(\"Please provide a dictionary of metadata.\");\n }\n for (const [key, value] of Object.entries(body.metadata)) {\n if (typeof key !== \"string\" || typeof value !== \"string\") {\n throw new Error(\n \"Please provide a dictionary of metadata with key value pair of strings.\"\n );\n }\n }\n return promptLayerTrackMetadata(apiKey, body);\n};\n\nconst score = (apiKey: string, body: TrackScore): Promise<boolean> => {\n if (typeof body.score !== \"number\") {\n throw new Error(\"Score must be a number\");\n }\n if (body.score < 0 || body.score > 100) {\n throw new Error(\"Score must be a number between 0 and 100.\");\n }\n return promptLayerTrackScore(apiKey, body);\n};\n\nconst prompt = (apiKey: string, body: TrackPrompt): Promise<boolean> => {\n if (!(body.prompt_input_variables instanceof Object)) {\n throw new Error(\"Prompt template input variable dictionary not provided.\");\n }\n return promptLayerTrackPrompt(apiKey, body);\n};\n\nconst group = (apiKey: string, body: TrackGroup) =>\n promptLayerTrackGroup(apiKey, body);\n\nexport class TrackManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n group = (body: TrackGroup) => group(this.apiKey, body);\n\n metadata = (body: TrackMetadata) => metadata(this.apiKey, body);\n\n prompt = (body: TrackPrompt) => prompt(this.apiKey, body);\n\n score = (body: TrackScore) => score(this.apiKey, body);\n}\n","import { GroupManager } from \"@/groups\";\nimport { promptLayerBase } from \"@/promptlayer\";\nimport { wrapWithSpan } from \"@/span-wrapper\";\nimport { TemplateManager } from \"@/templates\";\nimport { getTracer, setupTracing } from \"@/tracing\";\nimport { TrackManager } from \"@/track\";\nimport { GetPromptTemplateParams, LogRequest, RunRequest } from \"@/types\";\nimport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n streamResponse,\n trackRequest,\n utilLogRequest,\n} from \"@/utils\";\nimport * as opentelemetry from \"@opentelemetry/api\";\n\nconst MAP_PROVIDER_TO_FUNCTION_NAME = {\n openai: {\n chat: {\n function_name: \"openai.chat.completions.create\",\n stream_function: openaiStreamChat,\n },\n completion: {\n function_name: \"openai.completions.create\",\n stream_function: openaiStreamCompletion,\n },\n },\n anthropic: {\n chat: {\n function_name: \"anthropic.messages.create\",\n stream_function: anthropicStreamMessage,\n },\n completion: {\n function_name: \"anthropic.completions.create\",\n stream_function: anthropicStreamCompletion,\n },\n },\n};\n\nconst MAP_PROVIDER_TO_FUNCTION: Record<string, any> = {\n openai: openaiRequest,\n anthropic: anthropicRequest,\n};\n\nexport interface ClientOptions {\n apiKey?: string;\n enableTracing?: boolean;\n workspaceId?: number;\n}\n\nexport class PromptLayer {\n apiKey: string;\n templates: TemplateManager;\n group: GroupManager;\n track: TrackManager;\n enableTracing: boolean;\n wrapWithSpan: typeof wrapWithSpan;\n\n constructor({\n apiKey = process.env.PROMPTLAYER_API_KEY,\n enableTracing = false,\n }: ClientOptions = {}) {\n if (apiKey === undefined) {\n throw new Error(\n \"PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.\"\n );\n }\n\n this.apiKey = apiKey;\n this.enableTracing = enableTracing;\n this.templates = new TemplateManager(apiKey);\n this.group = new GroupManager(apiKey);\n this.track = new TrackManager(apiKey);\n this.wrapWithSpan = wrapWithSpan;\n\n if (enableTracing) {\n setupTracing(enableTracing, apiKey);\n }\n }\n\n get Anthropic() {\n try {\n const module = require(\"@anthropic-ai/sdk\").default;\n return promptLayerBase(this.apiKey, module, \"anthropic\", \"anthropic\");\n } catch (e) {\n console.error(\n \"To use the Anthropic module, you must install the @anthropic-ai/sdk package.\"\n );\n }\n }\n\n get OpenAI() {\n try {\n const module = require(\"openai\").default;\n return promptLayerBase(this.apiKey, module, \"openai\", \"openai\");\n } catch (e) {\n console.error(\n \"To use the OpenAI module, you must install the @openai/api package.\"\n );\n }\n }\n\n async run({\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream = false,\n }: RunRequest) {\n const tracer = getTracer();\n\n return tracer.startActiveSpan(\"PromptLayer Run\", async (span) => {\n try {\n const functionInput = {\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream,\n };\n span.setAttribute(\"function_input\", JSON.stringify(functionInput));\n\n const prompt_input_variables = inputVariables;\n const templateGetParams: GetPromptTemplateParams = {\n label: promptReleaseLabel,\n version: promptVersion,\n metadata_filters: metadata,\n };\n if (inputVariables) templateGetParams.input_variables = inputVariables;\n\n const promptBlueprint = await this.templates.get(\n promptName,\n templateGetParams\n );\n\n if (!promptBlueprint) throw new Error(\"Prompt not found\");\n\n const promptTemplate = promptBlueprint.prompt_template;\n if (!promptBlueprint.llm_kwargs) {\n throw new Error(\n `Prompt '${promptName}' does not have any LLM kwargs associated with it.`\n );\n }\n\n const promptBlueprintMetadata = promptBlueprint.metadata;\n if (!promptBlueprintMetadata) {\n throw new Error(\n `Prompt '${promptName}' does not have any metadata associated with it.`\n );\n }\n\n const promptBlueprintModel = promptBlueprintMetadata.model;\n if (!promptBlueprintModel) {\n throw new Error(\n `Prompt '${promptName}' does not have a model parameters associated with it.`\n );\n }\n\n const provider_type = promptBlueprintModel.provider;\n\n const request_start_time = new Date().toISOString();\n const kwargs = promptBlueprint.llm_kwargs;\n const config =\n MAP_PROVIDER_TO_FUNCTION_NAME[\n provider_type as keyof typeof MAP_PROVIDER_TO_FUNCTION_NAME\n ][promptTemplate.type];\n const function_name = config.function_name;\n\n const stream_function = config.stream_function;\n const request_function = MAP_PROVIDER_TO_FUNCTION[provider_type];\n const provider_base_url = promptBlueprint.provider_base_url;\n if (provider_base_url) {\n kwargs[\"baseURL\"] = provider_base_url.url;\n }\n kwargs[\"stream\"] = stream;\n if (stream && provider_type === \"openai\") {\n kwargs[\"stream_options\"] = { include_usage: true };\n }\n\n const response = await request_function(promptBlueprint, kwargs);\n\n const _trackRequest = (body: object) => {\n const request_end_time = new Date().toISOString();\n return trackRequest({\n function_name,\n provider_type,\n args: [],\n kwargs,\n tags,\n request_start_time,\n request_end_time,\n api_key: this.apiKey,\n metadata,\n prompt_id: promptBlueprint.id,\n prompt_version: promptBlueprint.version,\n prompt_input_variables,\n group_id: groupId,\n return_prompt_blueprint: true,\n span_id: span.spanContext().spanId,\n ...body,\n });\n };\n\n if (stream)\n return streamResponse(response, _trackRequest, stream_function);\n const requestLog = await _trackRequest({ request_response: response });\n\n const functionOutput = {\n request_id: requestLog.request_id,\n raw_response: response,\n prompt_blueprint: requestLog.prompt_blueprint,\n };\n span.setAttribute(\"function_output\", JSON.stringify(functionOutput));\n\n return functionOutput;\n } catch (error) {\n span.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n throw error;\n } finally {\n span.end();\n }\n });\n }\n\n async logRequest(body: LogRequest) {\n return utilLogRequest(this.apiKey, body);\n }\n}\n"],"mappings":"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","names":["URL_API_PROMPTLAYER","promptlayerApiHandler","apiKey","body","__async","proxyGenerator","promptLayerApiRequest","response","data","warnOnBadResponse","e","promptLayerTrackMetadata","__spreadProps","__spreadValues","promptLayerTrackScore","promptLayerTrackPrompt","promptLayerTrackGroup","promptLayerCreateGroup","getPromptTemplate","promptName","params","url","publishPromptTemplate","getAllPromptTemplates","_a","key","value","openaiStreamChat","results","_b","_c","_d","_e","content","functionCall","lastResult","toolCalls","result","delta","toolCall","lastToolCall","anthropicStreamMessage","cleaned_result","function_name","prev","current","final_result","generator","__asyncGenerator","iter","__forAwait","more","temp","error","__await","request_response","request_id","main_message","trackRequest","openaiStreamCompletion","text","anthropicStreamCompletion","completion","streamResponse","afterStream","mapResults","openaiChatRequest","client","kwargs","openaiCompletionsRequest","MAP_TYPE_TO_OPENAI_FUNCTION","openaiRequest","promptBlueprint","OpenAI","requestToMake","anthropicChatRequest","anthropicCompletionsRequest","MAP_TYPE_TO_ANTHROPIC_FUNCTION","anthropicRequest","Anthropic","utilLogRequest","GroupManager","apiKey","promptLayerCreateGroup","opentelemetry","SimpleSpanProcessor","NodeTracerProvider","SpanKind","SpanStatusCode","ExportResultCode","PromptLayerSpanExporter","enableTracing","apiKey","URL_API_PROMPTLAYER","attributes","kind","SpanKind","code","SpanStatusCode","time","spans","ExportResultCode","requestData","span","_a","event","link","__spreadProps","__spreadValues","response","error","span_exporter_default","getTracer","name","setupTracing","enableTracing","apiKey","provider","NodeTracerProvider","exporter","span_exporter_default","processor","SimpleSpanProcessor","tracer","getTracer","promptLayerBase","apiKey","llm","function_name","provider","handler","target","args","newTarget","prop","receiver","value","_a","_b","_c","_d","request_start_time","provider_type","return_pl_id","pl_tags","span","__async","response","spanId","resolve","reject","request_response","promptlayerApiHandler","error","opentelemetry","wrapWithSpan","functionName","func","attributes","args","tracer","getTracer","wrapperFunction","span","key","value","result","resolvedResult","error","handleError","TemplateManager","apiKey","promptName","params","getPromptTemplate","body","publishPromptTemplate","getAllPromptTemplates","metadata","apiKey","body","key","value","promptLayerTrackMetadata","score","promptLayerTrackScore","prompt","promptLayerTrackPrompt","group","promptLayerTrackGroup","TrackManager","opentelemetry","MAP_PROVIDER_TO_FUNCTION_NAME","openaiStreamChat","openaiStreamCompletion","anthropicStreamMessage","anthropicStreamCompletion","MAP_PROVIDER_TO_FUNCTION","openaiRequest","anthropicRequest","PromptLayer","apiKey","enableTracing","TemplateManager","GroupManager","TrackManager","wrapWithSpan","setupTracing","module","promptLayerBase","_0","__async","promptName","promptVersion","promptReleaseLabel","inputVariables","tags","metadata","groupId","stream","getTracer","span","functionInput","prompt_input_variables","templateGetParams","promptBlueprint","promptTemplate","promptBlueprintMetadata","promptBlueprintModel","provider_type","request_start_time","kwargs","config","function_name","stream_function","request_function","provider_base_url","response","_trackRequest","body","request_end_time","trackRequest","__spreadValues","streamResponse","requestLog","functionOutput","error","utilLogRequest"]}
1
+ {"version":3,"sources":["../../src/utils.ts","../../src/groups.ts","../../src/tracing.ts","../../src/span-exporter.ts","../../src/promptlayer.ts","../../src/span-wrapper.ts","../../src/templates.ts","../../src/track.ts","../../src/index.ts"],"sourcesContent":["import {\n GetPromptTemplateParams,\n GetPromptTemplateResponse,\n ListPromptTemplatesResponse,\n LogRequest,\n Pagination,\n PublishPromptTemplate,\n PublishPromptTemplateResponse,\n RequestLog,\n TrackGroup,\n TrackMetadata,\n TrackPrompt,\n TrackRequest,\n TrackScore,\n WorkflowResponse,\n} from \"@/types\";\nimport type TypeAnthropic from \"@anthropic-ai/sdk\";\nimport {\n Completion as AnthropicCompletion,\n Message,\n MessageStreamEvent,\n} from \"@anthropic-ai/sdk/resources\";\nimport type TypeOpenAI from \"openai\";\nimport {\n ChatCompletion,\n ChatCompletionChunk,\n Completion,\n} from \"openai/resources\";\n\nexport const URL_API_PROMPTLAYER =\n process.env.URL_API_PROMPTLAYER || \"https://api.promptlayer.com\";\n\nconst promptlayerApiHandler = async <Item>(\n apiKey: string,\n body: TrackRequest & {\n request_response: AsyncIterable<Item> | any;\n }\n) => {\n const isGenerator = body.request_response[Symbol.asyncIterator] !== undefined;\n if (isGenerator) {\n return proxyGenerator(apiKey, body.request_response, body);\n }\n return await promptLayerApiRequest(apiKey, body);\n};\n\nconst promptLayerApiRequest = async (apiKey: string, body: TrackRequest) => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-request`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While logging your request, PromptLayer experienced the following error:\"\n );\n }\n if (data && body.return_pl_id) {\n return [body.request_response, data.request_id];\n }\n } catch (e) {\n console.warn(\n `WARNING: While logging your request PromptLayer had the following error: ${e}`\n );\n }\n return body.request_response;\n};\n\nconst promptLayerTrackMetadata = async (\n apiKey: string,\n body: TrackMetadata\n): Promise<boolean> => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/library-track-metadata`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n }\n );\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While logging metadata to your request, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackScore = async (\n apiKey: string,\n body: TrackScore\n): Promise<boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/library-track-score`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While scoring your request, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While scoring your request, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackPrompt = async (\n apiKey: string,\n body: TrackPrompt\n): Promise<boolean> => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/library-track-prompt`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n }\n );\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackGroup = async (\n apiKey: string,\n body: TrackGroup\n): Promise<boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-group`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While associating your request with a group, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While associating your request with a group, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerCreateGroup = async (\n apiKey: string\n): Promise<number | boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/create-group`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While creating a group PromptLayer had the following error\"\n );\n return false;\n }\n return data.id;\n } catch (e) {\n console.warn(\n `WARNING: While creating a group PromptLayer had the following error: ${e}`\n );\n return false;\n }\n};\n\nconst getPromptTemplate = async (\n apiKey: string,\n promptName: string,\n params?: Partial<GetPromptTemplateParams>\n) => {\n try {\n const url = new URL(\n `${URL_API_PROMPTLAYER}/prompt-templates/${promptName}`\n );\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n body: JSON.stringify(params),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While fetching a prompt template PromptLayer had the following error\"\n );\n return null;\n }\n if (data.warning) {\n console.warn(\n `WARNING: While tracking your prompt PromptLayer had the following error: ${data.warning}`\n );\n }\n return data as Promise<GetPromptTemplateResponse>;\n } catch (e) {\n console.warn(\n `WARNING: While fetching a prompt template PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nconst publishPromptTemplate = async (\n apiKey: string,\n body: PublishPromptTemplate\n) => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/rest/prompt-templates`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n body: JSON.stringify({\n prompt_template: { ...body },\n prompt_version: { ...body },\n release_labels: body.release_labels ? body.release_labels : undefined,\n }),\n }\n );\n const data = await response.json();\n if (response.status === 400) {\n warnOnBadResponse(\n data,\n \"WARNING: While publishing a prompt template PromptLayer had the following error\"\n );\n }\n return data as Promise<PublishPromptTemplateResponse>;\n } catch (e) {\n console.warn(\n `WARNING: While publishing a prompt template PromptLayer had the following error: ${e}`\n );\n }\n};\n\nconst getAllPromptTemplates = async (\n apiKey: string,\n params?: Partial<Pagination>\n) => {\n try {\n const url = new URL(`${URL_API_PROMPTLAYER}/prompt-templates`);\n Object.entries(params || {}).forEach(([key, value]) =>\n url.searchParams.append(key, value.toString())\n );\n const response = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While fetching all prompt templates PromptLayer had the following error\"\n );\n return null;\n }\n return (data.items ?? []) as Promise<Array<ListPromptTemplatesResponse>>;\n } catch (e) {\n console.warn(\n `WARNING: While fetching all prompt templates PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nexport const runWorkflowRequest = async ({\n workflow_name,\n input_variables,\n metadata = {},\n workflow_label_name = null,\n workflow_version_number = null,\n api_key,\n }: {\n workflow_name: string;\n input_variables: Record<string, any>;\n metadata?: Record<string, string>;\n workflow_label_name?: string | null;\n workflow_version_number?: number | null;\n api_key: string;\n}): Promise<WorkflowResponse> => {\n const payload = {\n input_variables,\n metadata,\n workflow_label_name,\n workflow_version_number,\n };\n\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/workflows/${workflow_name}/run`, {\n method: 'POST',\n headers: {\n 'X-API-KEY': api_key,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n\n if (response.status !== 201) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(`Failed to run workflow: ${errorData.error || response.statusText}`);\n }\n\n const result = await response.json();\n return result;\n } catch (error) {\n console.error(`Failed to run workflow: ${(error as Error).message}`);\n throw error;\n }\n};\n\nconst openaiStreamChat = (results: ChatCompletionChunk[]): ChatCompletion => {\n let content: ChatCompletion.Choice[\"message\"][\"content\"] = null;\n let functionCall: ChatCompletion.Choice[\"message\"][\"function_call\"] =\n undefined;\n const response: ChatCompletion = {\n id: \"\",\n choices: [],\n created: Date.now(),\n model: \"\",\n object: \"chat.completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let toolCalls: ChatCompletion.Choice[\"message\"][\"tool_calls\"] = undefined;\n for (const result of results) {\n if (result.choices.length === 0) continue;\n const delta = result.choices[0].delta;\n\n if (delta.content) {\n content = `${content || \"\"}${delta.content || \"\"}`;\n }\n if (delta.function_call) {\n functionCall = {\n name: `${functionCall ? functionCall.name : \"\"}${\n delta.function_call.name || \"\"\n }`,\n arguments: `${functionCall ? functionCall.arguments : \"\"}${\n delta.function_call.arguments || \"\"\n }`,\n };\n }\n const toolCall = delta.tool_calls?.[0];\n if (toolCall) {\n toolCalls = toolCalls || [];\n const lastToolCall = toolCalls.at(-1);\n if (!lastToolCall || toolCall.id) {\n toolCalls.push({\n id: toolCall.id || \"\",\n type: toolCall.type || \"function\",\n function: {\n name: toolCall.function?.name || \"\",\n arguments: toolCall.function?.arguments || \"\",\n },\n });\n continue;\n }\n lastToolCall.function.name = `${lastToolCall.function.name}${\n toolCall.function?.name || \"\"\n }`;\n lastToolCall.function.arguments = `${lastToolCall.function.arguments}${\n toolCall.function?.arguments || \"\"\n }`;\n }\n }\n const firstChoice = results[0].choices.at(0);\n response.choices.push({\n finish_reason: firstChoice?.finish_reason ?? \"stop\",\n index: firstChoice?.index ?? 0,\n logprobs: firstChoice?.logprobs ?? null,\n message: {\n role: \"assistant\",\n content,\n function_call: functionCall ? functionCall : undefined,\n tool_calls: toolCalls ? toolCalls : undefined,\n refusal: firstChoice?.delta.refusal ?? null,\n },\n });\n response.id = lastResult.id;\n response.model = lastResult.model;\n response.created = lastResult.created;\n response.system_fingerprint = lastResult.system_fingerprint;\n response.usage = lastResult.usage;\n return response;\n};\n\nconst anthropicStreamMessage = (results: MessageStreamEvent[]): Message => {\n let response: Message = {\n id: \"\",\n model: \"\",\n content: [],\n role: \"assistant\",\n type: \"message\",\n stop_reason: \"stop_sequence\",\n stop_sequence: null,\n usage: {\n input_tokens: 0,\n output_tokens: 0,\n },\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let content = \"\";\n for (const result of results) {\n switch (result.type) {\n case \"message_start\": {\n response = {\n ...result.message,\n };\n break;\n }\n case \"content_block_delta\": {\n if (result.delta.type === \"text_delta\")\n content = `${content}${result.delta.text}`;\n }\n case \"message_delta\": {\n if (\"usage\" in result)\n response.usage.output_tokens = result.usage.output_tokens;\n if (\"stop_reason\" in result.delta)\n response.stop_reason = result.delta.stop_reason;\n }\n default: {\n break;\n }\n }\n }\n response.content.push({\n type: \"text\",\n text: content,\n });\n return response;\n};\n\nconst cleaned_result = (\n results: any[],\n function_name = \"openai.chat.completions.create\"\n) => {\n if (\"completion\" in results[0]) {\n return results.reduce(\n (prev, current) => ({\n ...current,\n completion: `${prev.completion}${current.completion}`,\n }),\n {}\n );\n }\n\n if (function_name === \"anthropic.messages.create\")\n return anthropicStreamMessage(results);\n\n if (\"text\" in results[0].choices[0]) {\n let response = \"\";\n for (const result of results) {\n response = `${response}${result.choices[0].text}`;\n }\n const final_result = structuredClone(results.at(-1));\n final_result.choices[0].text = response;\n return final_result;\n }\n\n if (\"delta\" in results[0].choices[0]) {\n const response = openaiStreamChat(results);\n response.choices[0] = {\n ...response.choices[0],\n ...response.choices[0].message,\n };\n return response;\n }\n\n return \"\";\n};\n\nasync function* proxyGenerator<Item>(\n apiKey: string,\n generator: AsyncIterable<Item>,\n body: TrackRequest\n) {\n const results = [];\n for await (const value of generator) {\n yield body.return_pl_id ? [value, null] : value;\n results.push(value);\n }\n const request_response = cleaned_result(results, body.function_name);\n const response = await promptLayerApiRequest(apiKey, {\n ...body,\n request_response,\n request_end_time: new Date().toISOString(),\n });\n if (response) {\n if (body.return_pl_id) {\n const request_id = (response as any)[1];\n const lastResult = results.at(-1);\n yield [lastResult, request_id];\n }\n }\n}\n\nconst warnOnBadResponse = (request_response: any, main_message: string) => {\n try {\n console.warn(`${main_message}: ${request_response.message}`);\n } catch (e) {\n console.warn(`${main_message}: ${request_response}`);\n }\n};\n\nconst trackRequest = async (body: TrackRequest) => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-request`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (response.status !== 200)\n warnOnBadResponse(\n response,\n \"WARNING: While logging your request, PromptLayer experienced the following error:\"\n );\n return response.json();\n } catch (e) {\n console.warn(\n `WARNING: While logging your request PromptLayer had the following error: ${e}`\n );\n }\n return {};\n};\n\nconst openaiStreamCompletion = (results: Completion[]) => {\n const response: Completion = {\n id: \"\",\n choices: [\n {\n finish_reason: \"stop\",\n index: 0,\n text: \"\",\n logprobs: null,\n },\n ],\n created: Date.now(),\n model: \"\",\n object: \"text_completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let text = \"\";\n for (const result of results) {\n if (result.choices.length > 0 && result.choices[0].text) {\n text = `${text}${result.choices[0].text}`;\n }\n }\n response.choices[0].text = text;\n response.id = lastResult.id;\n response.created = lastResult.created;\n response.model = lastResult.model;\n response.system_fingerprint = lastResult.system_fingerprint;\n response.usage = lastResult.usage;\n return response;\n};\n\nconst anthropicStreamCompletion = (results: AnthropicCompletion[]) => {\n const response: AnthropicCompletion = {\n completion: \"\",\n id: \"\",\n model: \"\",\n stop_reason: \"\",\n type: \"completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let completion = \"\";\n for (const result of results) {\n completion = `${completion}${result.completion}`;\n }\n response.completion = completion;\n response.id = lastResult.id;\n response.model = lastResult.model;\n response.stop_reason = lastResult.stop_reason;\n return response;\n};\n\nasync function* streamResponse<Item>(\n generator: AsyncIterable<Item>,\n afterStream: (body: object) => any,\n mapResults: any\n) {\n const data: {\n request_id: number | null;\n raw_response: any;\n prompt_blueprint: any;\n } = {\n request_id: null,\n raw_response: null,\n prompt_blueprint: null,\n };\n const results = [];\n for await (const result of generator) {\n results.push(result);\n data.raw_response = result;\n yield data;\n }\n const request_response = mapResults(results);\n const response = await afterStream({ request_response });\n data.request_id = response.request_id;\n data.prompt_blueprint = response.prompt_blueprint;\n yield data;\n}\n\nconst openaiChatRequest = async (client: TypeOpenAI, kwargs: any) => {\n return client.chat.completions.create(kwargs);\n};\n\nconst openaiCompletionsRequest = async (client: TypeOpenAI, kwargs: any) => {\n return client.completions.create(kwargs);\n};\n\nconst MAP_TYPE_TO_OPENAI_FUNCTION = {\n chat: openaiChatRequest,\n completion: openaiCompletionsRequest,\n};\n\nconst openaiRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const OpenAI = require(\"openai\").default;\n const client = new OpenAI({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_OPENAI_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst azureOpenAIRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const OpenAI = require(\"openai\").AzureOpenAI;\n const client = new OpenAI({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_OPENAI_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst anthropicChatRequest = async (client: TypeAnthropic, kwargs: any) => {\n return client.messages.create(kwargs);\n};\n\nconst anthropicCompletionsRequest = async (\n client: TypeAnthropic,\n kwargs: any\n) => {\n return client.completions.create(kwargs);\n};\n\nconst MAP_TYPE_TO_ANTHROPIC_FUNCTION = {\n chat: anthropicChatRequest,\n completion: anthropicCompletionsRequest,\n};\n\nconst anthropicRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const Anthropic = require(\"@anthropic-ai/sdk\").default;\n const client = new Anthropic({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_ANTHROPIC_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst utilLogRequest = async (\n apiKey: string,\n body: LogRequest\n): Promise<RequestLog | null> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/log-request`, {\n method: \"POST\",\n headers: {\n \"X-API-KEY\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (response.status !== 201) {\n warnOnBadResponse(\n response,\n \"WARNING: While logging your request PromptLayer had the following error\"\n );\n return null;\n }\n return response.json();\n } catch (e) {\n console.warn(\n `WARNING: While tracking your prompt PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nexport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n azureOpenAIRequest,\n getAllPromptTemplates,\n getPromptTemplate,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n promptlayerApiHandler,\n promptLayerApiRequest,\n promptLayerCreateGroup,\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n publishPromptTemplate,\n streamResponse,\n trackRequest,\n utilLogRequest,\n};\n","import { promptLayerCreateGroup } from \"@/utils\";\n\nexport class GroupManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n create = () => promptLayerCreateGroup(this.apiKey);\n}\n","import * as opentelemetry from '@opentelemetry/api';\nimport {SimpleSpanProcessor} from '@opentelemetry/sdk-trace-base';\nimport {NodeTracerProvider} from '@opentelemetry/sdk-trace-node';\nimport PromptLayerSpanExporter from '@/span-exporter';\n\nexport const getTracer = (name: string = 'promptlayer-tracer') => {\n return opentelemetry.trace.getTracer(name);\n}\n\nexport const setupTracing = (enableTracing: boolean, apiKey?: string) => {\n const provider = new NodeTracerProvider();\n const exporter = new PromptLayerSpanExporter(enableTracing, apiKey);\n const processor = new SimpleSpanProcessor(exporter);\n provider.addSpanProcessor(processor);\n provider.register();\n}\n","import {Attributes, SpanKind, SpanStatusCode} from '@opentelemetry/api';\nimport {ReadableSpan, SpanExporter} from '@opentelemetry/sdk-trace-base';\nimport {ExportResultCode} from '@opentelemetry/core';\nimport {URL_API_PROMPTLAYER} from '@/utils';\n\nclass PromptLayerSpanExporter implements SpanExporter {\n private apiKey: string | undefined;\n private enableTracing: boolean;\n private url: string;\n\n constructor(enableTracing: boolean, apiKey?: string) {\n this.apiKey = apiKey || process.env.PROMPTLAYER_API_KEY;\n this.enableTracing = enableTracing;\n this.url = `${URL_API_PROMPTLAYER}/spans-bulk`;\n }\n\n private attributesToObject(attributes: Attributes | undefined): Record<string, any> {\n if (!attributes) return {};\n return Object.fromEntries(Object.entries(attributes));\n }\n\n private spanKindToString(kind: SpanKind): string {\n const kindMap: Record<SpanKind, string> = {\n [SpanKind.INTERNAL]: 'SpanKind.INTERNAL',\n [SpanKind.SERVER]: 'SpanKind.SERVER',\n [SpanKind.CLIENT]: 'SpanKind.CLIENT',\n [SpanKind.PRODUCER]: 'SpanKind.PRODUCER',\n [SpanKind.CONSUMER]: 'SpanKind.CONSUMER',\n };\n return kindMap[kind] || 'SpanKind.INTERNAL';\n }\n\n private statusCodeToString(code: SpanStatusCode): string {\n const statusMap: Record<SpanStatusCode, string> = {\n [SpanStatusCode.ERROR]: 'StatusCode.ERROR',\n [SpanStatusCode.OK]: 'StatusCode.OK',\n [SpanStatusCode.UNSET]: 'StatusCode.UNSET',\n };\n return statusMap[code] || 'StatusCode.UNSET';\n }\n\n private toNanoseconds(time: [number, number]): string {\n return (BigInt(time[0]) * BigInt(1e9) + BigInt(time[1])).toString();\n };\n\n export(spans: ReadableSpan[]): Promise<ExportResultCode> {\n if (!this.enableTracing) {\n return Promise.resolve(ExportResultCode.SUCCESS);\n }\n\n const requestData = spans.map(span => ({\n name: span.name,\n context: {\n trace_id: span.spanContext().traceId,\n span_id: span.spanContext().spanId,\n trace_state: span.spanContext().traceState?.serialize() || '',\n },\n kind: this.spanKindToString(span.kind),\n parent_id: span.parentSpanId || null,\n start_time: this.toNanoseconds(span.startTime),\n end_time: this.toNanoseconds(span.endTime),\n status: {\n status_code: this.statusCodeToString(span.status.code),\n description: span.status.message,\n },\n attributes: this.attributesToObject(span.attributes),\n events: span.events.map(event => ({\n name: event.name,\n timestamp: this.toNanoseconds(event.time),\n attributes: this.attributesToObject(event.attributes),\n })),\n links: span.links.map(link => ({\n context: link.context,\n attributes: this.attributesToObject(link.attributes),\n })),\n resource: {\n attributes: {\n ...span.resource.attributes,\n \"service.name\": \"prompt-layer-js\",\n },\n schema_url: '',\n },\n }));\n\n return fetch(this.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-KEY': this.apiKey || '',\n },\n body: JSON.stringify({\n spans: requestData,\n }),\n })\n .then(response => {\n if (!response.ok) {\n console.error(`Error exporting spans\\nHTTP error! status: ${response.status}`);\n return ExportResultCode.FAILED;\n }\n return ExportResultCode.SUCCESS;\n })\n .catch((error) => {\n console.error('Error exporting spans:', error);\n return ExportResultCode.FAILED;\n });\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nexport default PromptLayerSpanExporter;\n","import {getTracer} from \"@/tracing\";\nimport {promptlayerApiHandler} from \"@/utils\";\n\nconst tracer = getTracer();\n\nexport const promptLayerBase = (\n apiKey: string,\n llm: object,\n function_name = \"\",\n provider = \"openai\"\n) => {\n const handler: ProxyHandler<any> = {\n construct: (target, args) => {\n const newTarget = Reflect.construct(target, args);\n Object.defineProperties(newTarget, {\n function_name: {\n value: function_name,\n writable: true,\n },\n provider: {\n value: provider,\n },\n });\n return new Proxy(newTarget, handler);\n },\n get: (target, prop, receiver) => {\n const value = target[prop];\n const function_name = `${Reflect.get(\n target,\n \"function_name\"\n )}.${prop.toString()}`;\n\n if (typeof value === \"object\") {\n Object.defineProperties(value, {\n function_name: {\n value: function_name,\n writable: true,\n },\n provider: {\n value: provider,\n },\n });\n return new Proxy(value, handler);\n }\n\n if (typeof value === \"function\") {\n return (...args: any[]) => {\n const request_start_time = new Date().toISOString();\n const provider_type = Reflect.get(target, \"provider\");\n const return_pl_id = args[0]?.return_pl_id;\n const pl_tags = args[0]?.pl_tags;\n delete args[0]?.return_pl_id;\n delete args[0]?.pl_tags;\n\n return tracer.startActiveSpan(`${provider_type}.${function_name}`, async (span: any) => {\n try {\n span.setAttribute('function_input', JSON.stringify(args));\n const response = Reflect.apply(value, target, args);\n const spanId = span.spanContext().spanId;\n\n if (response instanceof Promise) {\n return new Promise((resolve, reject) => {\n response\n .then(async (request_response) => {\n const response = await promptlayerApiHandler(apiKey, {\n api_key: apiKey,\n provider_type,\n function_name,\n request_start_time,\n request_end_time: new Date().toISOString(),\n request_response,\n kwargs: args[0],\n return_pl_id,\n tags: pl_tags,\n span_id: spanId,\n });\n\n span.setAttribute('function_output', JSON.stringify(response));\n span.setAttribute('response_status', 'success');\n span.end();\n resolve(response);\n })\n .catch((error) => {\n span.recordException(error);\n span.setAttribute('response_status', 'error');\n span.end();\n reject(error);\n });\n });\n }\n\n span.setAttribute('function_output', JSON.stringify(response));\n span.setAttribute('response_status', 'success');\n span.end();\n return response;\n } catch (error) {\n span.recordException(error);\n span.setAttribute('response_status', 'error');\n span.end();\n throw error;\n }\n });\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n };\n\n return new Proxy(llm, handler);\n};\n","import * as opentelemetry from '@opentelemetry/api';\nimport { getTracer } from '@/tracing';\n\nexport const wrapWithSpan = (functionName: string, func: Function, attributes?: Record<string, any>) => {\n return function (...args: any[]) {\n const tracer = getTracer();\n\n const wrapperFunction = (span: opentelemetry.Span) => {\n try {\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n span.setAttribute(key, value);\n });\n }\n\n span.setAttribute('function_input', JSON.stringify(args));\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result.then((resolvedResult) => {\n span.setAttribute('function_output', JSON.stringify(resolvedResult));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n return resolvedResult;\n }).catch((error) => {\n handleError(span, error, args);\n throw error;\n }).finally(() => span.end());\n } else {\n span.setAttribute('function_output', JSON.stringify(result));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n handleError(span, error, args);\n throw error;\n }\n };\n\n return tracer.startActiveSpan(functionName, wrapperFunction);\n };\n};\n\nconst handleError = (span: opentelemetry.Span, error: any, args: any[]) => {\n span.setAttribute('function_input', JSON.stringify(args));\n span.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n span.end();\n}\n","import {\n GetPromptTemplateParams,\n Pagination,\n PublishPromptTemplate,\n} from \"@/types\";\nimport {\n getAllPromptTemplates,\n getPromptTemplate,\n publishPromptTemplate,\n} from \"@/utils\";\n\nexport class TemplateManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n get = (promptName: string, params?: Partial<GetPromptTemplateParams>) =>\n getPromptTemplate(this.apiKey, promptName, params);\n\n publish = (body: PublishPromptTemplate) =>\n publishPromptTemplate(this.apiKey, body);\n\n all = (params?: Pagination) => getAllPromptTemplates(this.apiKey, params);\n}\n","import { TrackGroup, TrackMetadata, TrackPrompt, TrackScore } from \"@/types\";\nimport {\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n} from \"@/utils\";\n\nconst metadata = (apiKey: string, body: TrackMetadata): Promise<boolean> => {\n if (!(body.metadata instanceof Object)) {\n throw new Error(\"Please provide a dictionary of metadata.\");\n }\n for (const [key, value] of Object.entries(body.metadata)) {\n if (typeof key !== \"string\" || typeof value !== \"string\") {\n throw new Error(\n \"Please provide a dictionary of metadata with key value pair of strings.\"\n );\n }\n }\n return promptLayerTrackMetadata(apiKey, body);\n};\n\nconst score = (apiKey: string, body: TrackScore): Promise<boolean> => {\n if (typeof body.score !== \"number\") {\n throw new Error(\"Score must be a number\");\n }\n if (body.score < 0 || body.score > 100) {\n throw new Error(\"Score must be a number between 0 and 100.\");\n }\n return promptLayerTrackScore(apiKey, body);\n};\n\nconst prompt = (apiKey: string, body: TrackPrompt): Promise<boolean> => {\n if (!(body.prompt_input_variables instanceof Object)) {\n throw new Error(\"Prompt template input variable dictionary not provided.\");\n }\n return promptLayerTrackPrompt(apiKey, body);\n};\n\nconst group = (apiKey: string, body: TrackGroup) =>\n promptLayerTrackGroup(apiKey, body);\n\nexport class TrackManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n group = (body: TrackGroup) => group(this.apiKey, body);\n\n metadata = (body: TrackMetadata) => metadata(this.apiKey, body);\n\n prompt = (body: TrackPrompt) => prompt(this.apiKey, body);\n\n score = (body: TrackScore) => score(this.apiKey, body);\n}\n","import { GroupManager } from \"@/groups\";\nimport { promptLayerBase } from \"@/promptlayer\";\nimport { wrapWithSpan } from \"@/span-wrapper\";\nimport { TemplateManager } from \"@/templates\";\nimport { getTracer, setupTracing } from \"@/tracing\";\nimport { TrackManager } from \"@/track\";\nimport { GetPromptTemplateParams, LogRequest, RunRequest, WorkflowRequest, WorkflowResponse } from \"@/types\";\nimport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n azureOpenAIRequest,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n runWorkflowRequest,\n streamResponse,\n trackRequest,\n utilLogRequest,\n} from \"@/utils\";\nimport * as opentelemetry from \"@opentelemetry/api\";\n\nconst MAP_PROVIDER_TO_FUNCTION_NAME = {\n openai: {\n chat: {\n function_name: \"openai.chat.completions.create\",\n stream_function: openaiStreamChat,\n },\n completion: {\n function_name: \"openai.completions.create\",\n stream_function: openaiStreamCompletion,\n },\n },\n anthropic: {\n chat: {\n function_name: \"anthropic.messages.create\",\n stream_function: anthropicStreamMessage,\n },\n completion: {\n function_name: \"anthropic.completions.create\",\n stream_function: anthropicStreamCompletion,\n },\n },\n \"openai.azure\": {\n chat: {\n function_name: \"openai.AzureOpenAI.chat.completions.create\",\n stream_function: openaiStreamChat,\n },\n completion: {\n function_name: \"openai.AzureOpenAI.completions.create\",\n stream_function: openaiStreamCompletion,\n },\n },\n};\n\nconst MAP_PROVIDER_TO_FUNCTION: Record<string, any> = {\n openai: openaiRequest,\n anthropic: anthropicRequest,\n \"openai.azure\": azureOpenAIRequest,\n};\n\nexport interface ClientOptions {\n apiKey?: string;\n enableTracing?: boolean;\n workspaceId?: number;\n}\n\nexport class PromptLayer {\n apiKey: string;\n templates: TemplateManager;\n group: GroupManager;\n track: TrackManager;\n enableTracing: boolean;\n wrapWithSpan: typeof wrapWithSpan;\n\n constructor({\n apiKey = process.env.PROMPTLAYER_API_KEY,\n enableTracing = false,\n }: ClientOptions = {}) {\n if (apiKey === undefined) {\n throw new Error(\n \"PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.\"\n );\n }\n\n this.apiKey = apiKey;\n this.enableTracing = enableTracing;\n this.templates = new TemplateManager(apiKey);\n this.group = new GroupManager(apiKey);\n this.track = new TrackManager(apiKey);\n this.wrapWithSpan = wrapWithSpan;\n\n if (enableTracing) {\n setupTracing(enableTracing, apiKey);\n }\n }\n\n get Anthropic() {\n try {\n const module = require(\"@anthropic-ai/sdk\").default;\n return promptLayerBase(this.apiKey, module, \"anthropic\", \"anthropic\");\n } catch (e) {\n console.error(\n \"To use the Anthropic module, you must install the @anthropic-ai/sdk package.\"\n );\n }\n }\n\n get OpenAI() {\n try {\n const module = require(\"openai\").default;\n return promptLayerBase(this.apiKey, module, \"openai\", \"openai\");\n } catch (e) {\n console.error(\n \"To use the OpenAI module, you must install the @openai/api package.\"\n );\n }\n }\n\n async run({\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream = false,\n }: RunRequest) {\n const tracer = getTracer();\n\n return tracer.startActiveSpan(\"PromptLayer Run\", async (span) => {\n try {\n const functionInput = {\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream,\n };\n span.setAttribute(\"function_input\", JSON.stringify(functionInput));\n\n const prompt_input_variables = inputVariables;\n const templateGetParams: GetPromptTemplateParams = {\n label: promptReleaseLabel,\n version: promptVersion,\n metadata_filters: metadata,\n };\n if (inputVariables) templateGetParams.input_variables = inputVariables;\n\n const promptBlueprint = await this.templates.get(\n promptName,\n templateGetParams\n );\n\n if (!promptBlueprint) throw new Error(\"Prompt not found\");\n\n const promptTemplate = promptBlueprint.prompt_template;\n if (!promptBlueprint.llm_kwargs) {\n throw new Error(\n `Prompt '${promptName}' does not have any LLM kwargs associated with it.`\n );\n }\n\n const promptBlueprintMetadata = promptBlueprint.metadata;\n if (!promptBlueprintMetadata) {\n throw new Error(\n `Prompt '${promptName}' does not have any metadata associated with it.`\n );\n }\n\n const promptBlueprintModel = promptBlueprintMetadata.model;\n if (!promptBlueprintModel) {\n throw new Error(\n `Prompt '${promptName}' does not have a model parameters associated with it.`\n );\n }\n\n const provider_type = promptBlueprintModel.provider;\n\n const request_start_time = new Date().toISOString();\n const kwargs = promptBlueprint.llm_kwargs;\n const config =\n MAP_PROVIDER_TO_FUNCTION_NAME[\n provider_type as keyof typeof MAP_PROVIDER_TO_FUNCTION_NAME\n ][promptTemplate.type];\n const function_name = config.function_name;\n\n const stream_function = config.stream_function;\n const request_function = MAP_PROVIDER_TO_FUNCTION[provider_type];\n const provider_base_url = promptBlueprint.provider_base_url;\n if (provider_base_url) {\n kwargs[\"baseURL\"] = provider_base_url.url;\n }\n kwargs[\"stream\"] = stream;\n if (stream && [\"openai\", \"openai.azure\"].includes(provider_type)) {\n kwargs[\"stream_options\"] = { include_usage: true };\n }\n\n const response = await request_function(promptBlueprint, kwargs);\n\n const _trackRequest = (body: object) => {\n const request_end_time = new Date().toISOString();\n return trackRequest({\n function_name,\n provider_type,\n args: [],\n kwargs,\n tags,\n request_start_time,\n request_end_time,\n api_key: this.apiKey,\n metadata,\n prompt_id: promptBlueprint.id,\n prompt_version: promptBlueprint.version,\n prompt_input_variables,\n group_id: groupId,\n return_prompt_blueprint: true,\n span_id: span.spanContext().spanId,\n ...body,\n });\n };\n\n if (stream)\n return streamResponse(response, _trackRequest, stream_function);\n const requestLog = await _trackRequest({ request_response: response });\n\n const functionOutput = {\n request_id: requestLog.request_id,\n raw_response: response,\n prompt_blueprint: requestLog.prompt_blueprint,\n };\n span.setAttribute(\"function_output\", JSON.stringify(functionOutput));\n\n return functionOutput;\n } catch (error) {\n span.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n throw error;\n } finally {\n span.end();\n }\n });\n }\n\n async runWorkflow({\n workflowName,\n inputVariables = {},\n metadata = {},\n workflowLabelName = null,\n workflowVersionNumber = null,\n }: WorkflowRequest): Promise<WorkflowResponse> {\n try {\n const result = await runWorkflowRequest({\n workflow_name: workflowName,\n input_variables: inputVariables,\n metadata,\n workflow_label_name: workflowLabelName,\n workflow_version_number: workflowVersionNumber,\n api_key: this.apiKey,\n });\n return result;\n } catch (error) {\n if (error instanceof Error) {\n console.error(\"Error running workflow:\", error.message);\n throw new Error(`Error running workflow: ${error.message}`);\n } else {\n console.error(\"Unknown error running workflow:\", error);\n throw new Error(\"Unknown error running workflow\");\n }\n }\n }\n\n async logRequest(body: LogRequest) {\n return utilLogRequest(this.apiKey, body);\n }\n}\n"],"mappings":"yoDA6BO,IAAMA,EACX,QAAQ,IAAI,qBAAuB,8BAE/BC,GAAwB,CAC5BC,EACAC,IAGGC,EAAA,wBAEH,OADoBD,EAAK,iBAAiB,OAAO,aAAa,IAAM,OAE3DE,GAAeH,EAAQC,EAAK,iBAAkBA,CAAI,EAEpD,MAAMG,GAAsBJ,EAAQC,CAAI,CACjD,GAEMG,GAAwB,CAAOJ,EAAgBC,IAAuBC,EAAA,wBAC1E,GAAI,CACF,IAAMG,EAAW,MAAM,MAAM,GAAGP,CAAmB,iBAAkB,CACnE,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUG,CAAI,CAC3B,CAAC,EACKK,EAAO,MAAMD,EAAS,KAAK,EAOjC,GANIA,EAAS,SAAW,KACtBE,EACED,EACA,mFACF,EAEEA,GAAQL,EAAK,aACf,MAAO,CAACA,EAAK,iBAAkBK,EAAK,UAAU,CAElD,OAASE,EAAG,CACV,QAAQ,KACN,4EAA4EA,CAAC,EAC/E,CACF,CACA,OAAOP,EAAK,gBACd,GAEMQ,GAA2B,CAC/BT,EACAC,IACqBC,EAAA,wBACrB,GAAI,CACF,IAAMG,EAAW,MAAM,MACrB,GAAGP,CAAmB,0BACtB,CACE,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUY,EAAAC,EAAA,GAChBV,GADgB,CAEnB,QAASD,CACX,EAAC,CACH,CACF,EACMM,EAAO,MAAMD,EAAS,KAAK,EACjC,GAAIA,EAAS,SAAW,IACtB,OAAAE,EACED,EACA,8FACF,EACO,EAEX,OAASE,EAAG,CACV,eAAQ,KACN,iGAAiGA,CAAC,EACpG,EACO,EACT,CACA,MAAO,EACT,GAEMI,GAAwB,CAC5BZ,EACAC,IACqBC,EAAA,wBACrB,GAAI,CACF,IAAMG,EAAW,MAAM,MAAM,GAAGP,CAAmB,uBAAwB,CACzE,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUY,EAAAC,EAAA,GAChBV,GADgB,CAEnB,QAASD,CACX,EAAC,CACH,CAAC,EACKM,EAAO,MAAMD,EAAS,KAAK,EACjC,GAAIA,EAAS,SAAW,IACtB,OAAAE,EACED,EACA,kFACF,EACO,EAEX,OAASE,EAAG,CACV,eAAQ,KACN,qFAAqFA,CAAC,EACxF,EACO,EACT,CACA,MAAO,EACT,GAEMK,GAAyB,CAC7Bb,EACAC,IACqBC,EAAA,wBACrB,GAAI,CACF,IAAMG,EAAW,MAAM,MACrB,GAAGP,CAAmB,wBACtB,CACE,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUY,EAAAC,EAAA,GAChBV,GADgB,CAEnB,QAASD,CACX,EAAC,CACH,CACF,EACMM,EAAO,MAAMD,EAAS,KAAK,EACjC,GAAIA,EAAS,SAAW,IACtB,OAAAE,EACED,EACA,6GACF,EACO,EAEX,OAASE,EAAG,CACV,eAAQ,KACN,gHAAgHA,CAAC,EACnH,EACO,EACT,CACA,MAAO,EACT,GAEMM,GAAwB,CAC5Bd,EACAC,IACqBC,EAAA,wBACrB,GAAI,CACF,IAAMG,EAAW,MAAM,MAAM,GAAGP,CAAmB,eAAgB,CACjE,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUY,EAAAC,EAAA,GAChBV,GADgB,CAEnB,QAASD,CACX,EAAC,CACH,CAAC,EACKM,EAAO,MAAMD,EAAS,KAAK,EACjC,GAAIA,EAAS,SAAW,IACtB,OAAAE,EACED,EACA,mGACF,EACO,EAEX,OAASE,EAAG,CACV,eAAQ,KACN,sGAAsGA,CAAC,EACzG,EACO,EACT,CACA,MAAO,EACT,GAEMO,GACJf,GAC8BE,EAAA,wBAC9B,GAAI,CACF,IAAMG,EAAW,MAAM,MAAM,GAAGP,CAAmB,gBAAiB,CAClE,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,QAASE,CACX,CAAC,CACH,CAAC,EACKM,EAAO,MAAMD,EAAS,KAAK,EACjC,OAAIA,EAAS,SAAW,KACtBE,EACED,EACA,qEACF,EACO,IAEFA,EAAK,EACd,OAAS,EAAG,CACV,eAAQ,KACN,wEAAwE,CAAC,EAC3E,EACO,EACT,CACF,GAEMU,GAAoB,CACxBhB,EACAiB,EACAC,IACGhB,EAAA,wBACH,GAAI,CACF,IAAMiB,EAAM,IAAI,IACd,GAAGrB,CAAmB,qBAAqBmB,CAAU,EACvD,EACMZ,EAAW,MAAM,MAAMc,EAAK,CAChC,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,YAAanB,CACf,EACA,KAAM,KAAK,UAAUkB,CAAM,CAC7B,CAAC,EACKZ,EAAO,MAAMD,EAAS,KAAK,EACjC,OAAIA,EAAS,SAAW,KACtBE,EACED,EACA,+EACF,EACO,OAELA,EAAK,SACP,QAAQ,KACN,4EAA4EA,EAAK,OAAO,EAC1F,EAEKA,EACT,OAASE,EAAG,CACV,eAAQ,KACN,kFAAkFA,CAAC,EACrF,EACO,IACT,CACF,GAEMY,GAAwB,CAC5BpB,EACAC,IACGC,EAAA,wBACH,GAAI,CACF,IAAMG,EAAW,MAAM,MACrB,GAAGP,CAAmB,yBACtB,CACE,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,YAAaE,CACf,EACA,KAAM,KAAK,UAAU,CACnB,gBAAiBW,EAAA,GAAKV,GACtB,eAAgBU,EAAA,GAAKV,GACrB,eAAgBA,EAAK,eAAiBA,EAAK,eAAiB,MAC9D,CAAC,CACH,CACF,EACMK,EAAO,MAAMD,EAAS,KAAK,EACjC,OAAIA,EAAS,SAAW,KACtBE,EACED,EACA,iFACF,EAEKA,CACT,OAASE,EAAG,CACV,QAAQ,KACN,oFAAoFA,CAAC,EACvF,CACF,CACF,GAEMa,GAAwB,CAC5BrB,EACAkB,IACGhB,EAAA,wBAzTL,IAAAoB,EA0TE,GAAI,CACF,IAAMH,EAAM,IAAI,IAAI,GAAGrB,CAAmB,mBAAmB,EAC7D,OAAO,QAAQoB,GAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACK,EAAKC,CAAK,IAC/CL,EAAI,aAAa,OAAOI,EAAKC,EAAM,SAAS,CAAC,CAC/C,EACA,IAAMnB,EAAW,MAAM,MAAMc,EAAK,CAChC,QAAS,CACP,eAAgB,mBAChB,YAAanB,CACf,CACF,CAAC,EACKM,EAAO,MAAMD,EAAS,KAAK,EACjC,OAAIA,EAAS,SAAW,KACtBE,EACED,EACA,kFACF,EACO,OAEDgB,EAAAhB,EAAK,QAAL,KAAAgB,EAAc,CAAC,CACzB,OAASd,EAAG,CACV,eAAQ,KACN,qFAAqFA,CAAC,EACxF,EACO,IACT,CACF,GAEaiB,GAA4BC,GAcRxB,EAAA,QAdQwB,GAcR,UAdQ,CACtC,cAAAC,EACA,gBAAAC,EACA,SAAAC,EAAW,CAAC,EACZ,oBAAAC,EAAsB,KACtB,wBAAAC,EAA0B,KAC1B,QAAAC,CACF,EAOgC,CAC/B,IAAMC,EAAU,CACd,gBAAAL,EACA,SAAAC,EACA,oBAAAC,EACA,wBAAAC,CACF,EAEA,GAAI,CACF,IAAM1B,EAAW,MAAM,MAAM,GAAGP,CAAmB,cAAc6B,CAAa,OAAQ,CACpF,OAAQ,OACR,QAAS,CACP,YAAaK,EACb,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUC,CAAO,CAC9B,CAAC,EAED,GAAI5B,EAAS,SAAW,IAAK,CAC3B,IAAM6B,EAAY,MAAM7B,EAAS,KAAK,EAAE,MAAM,KAAO,CAAC,EAAE,EACxD,MAAM,IAAI,MAAM,2BAA2B6B,EAAU,OAAS7B,EAAS,UAAU,EAAE,CACrF,CAGA,OADe,MAAMA,EAAS,KAAK,CAErC,OAAS8B,EAAO,CACd,cAAQ,MAAM,2BAA4BA,EAAgB,OAAO,EAAE,EAC7DA,CACR,CACF,GAEMC,EAAoBC,GAAmD,CAnY7E,IAAAf,EAAAgB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAoYE,IAAIC,EAAuD,KACvDC,EAEE1C,EAA2B,CAC/B,GAAI,GACJ,QAAS,CAAC,EACV,QAAS,KAAK,IAAI,EAClB,MAAO,GACP,OAAQ,iBACV,EACM2C,EAAaX,EAAQ,GAAG,EAAE,EAChC,GAAI,CAACW,EAAY,OAAO3C,EACxB,IAAI4C,EACJ,QAAWC,KAAUb,EAAS,CAC5B,GAAIa,EAAO,QAAQ,SAAW,EAAG,SACjC,IAAMC,EAAQD,EAAO,QAAQ,CAAC,EAAE,MAE5BC,EAAM,UACRL,EAAU,GAAGA,GAAW,EAAE,GAAGK,EAAM,SAAW,EAAE,IAE9CA,EAAM,gBACRJ,EAAe,CACb,KAAM,GAAGA,EAAeA,EAAa,KAAO,EAAE,GAC5CI,EAAM,cAAc,MAAQ,EAC9B,GACA,UAAW,GAAGJ,EAAeA,EAAa,UAAY,EAAE,GACtDI,EAAM,cAAc,WAAa,EACnC,EACF,GAEF,IAAMC,GAAW9B,EAAA6B,EAAM,aAAN,YAAA7B,EAAmB,GACpC,GAAI8B,EAAU,CACZH,EAAYA,GAAa,CAAC,EAC1B,IAAMI,EAAeJ,EAAU,GAAG,EAAE,EACpC,GAAI,CAACI,GAAgBD,EAAS,GAAI,CAChCH,EAAU,KAAK,CACb,GAAIG,EAAS,IAAM,GACnB,KAAMA,EAAS,MAAQ,WACvB,SAAU,CACR,OAAMd,EAAAc,EAAS,WAAT,YAAAd,EAAmB,OAAQ,GACjC,YAAWC,EAAAa,EAAS,WAAT,YAAAb,EAAmB,YAAa,EAC7C,CACF,CAAC,EACD,QACF,CACAc,EAAa,SAAS,KAAO,GAAGA,EAAa,SAAS,IAAI,KACxDb,EAAAY,EAAS,WAAT,YAAAZ,EAAmB,OAAQ,EAC7B,GACAa,EAAa,SAAS,UAAY,GAAGA,EAAa,SAAS,SAAS,KAClEZ,EAAAW,EAAS,WAAT,YAAAX,EAAmB,YAAa,EAClC,EACF,CACF,CACA,IAAMa,EAAcjB,EAAQ,CAAC,EAAE,QAAQ,GAAG,CAAC,EAC3C,OAAAhC,EAAS,QAAQ,KAAK,CACpB,eAAeqC,EAAAY,GAAA,YAAAA,EAAa,gBAAb,KAAAZ,EAA8B,OAC7C,OAAOC,EAAAW,GAAA,YAAAA,EAAa,QAAb,KAAAX,EAAsB,EAC7B,UAAUC,EAAAU,GAAA,YAAAA,EAAa,WAAb,KAAAV,EAAyB,KACnC,QAAS,CACP,KAAM,YACN,QAAAE,EACA,cAAeC,GAA8B,OAC7C,WAAYE,GAAwB,OACpC,SAASJ,EAAAS,GAAA,YAAAA,EAAa,MAAM,UAAnB,KAAAT,EAA8B,IACzC,CACF,CAAC,EACDxC,EAAS,GAAK2C,EAAW,GACzB3C,EAAS,MAAQ2C,EAAW,MAC5B3C,EAAS,QAAU2C,EAAW,QAC9B3C,EAAS,mBAAqB2C,EAAW,mBACzC3C,EAAS,MAAQ2C,EAAW,MACrB3C,CACT,EAEMkD,EAA0BlB,GAA2C,CACzE,IAAIhC,EAAoB,CACtB,GAAI,GACJ,MAAO,GACP,QAAS,CAAC,EACV,KAAM,YACN,KAAM,UACN,YAAa,gBACb,cAAe,KACf,MAAO,CACL,aAAc,EACd,cAAe,CACjB,CACF,EAEA,GAAI,CADegC,EAAQ,GAAG,EAAE,EACf,OAAOhC,EACxB,IAAIyC,EAAU,GACd,QAAWI,KAAUb,EACnB,OAAQa,EAAO,KAAM,CACnB,IAAK,gBAAiB,CACpB7C,EAAWM,EAAA,GACNuC,EAAO,SAEZ,KACF,CACA,IAAK,sBACCA,EAAO,MAAM,OAAS,eACxBJ,EAAU,GAAGA,CAAO,GAAGI,EAAO,MAAM,IAAI,IAE5C,IAAK,gBACC,UAAWA,IACb7C,EAAS,MAAM,cAAgB6C,EAAO,MAAM,eAC1C,gBAAiBA,EAAO,QAC1B7C,EAAS,YAAc6C,EAAO,MAAM,aAExC,QACE,KAEJ,CAEF,OAAA7C,EAAS,QAAQ,KAAK,CACpB,KAAM,OACN,KAAMyC,CACR,CAAC,EACMzC,CACT,EAEMmD,GAAiB,CACrBnB,EACAoB,EAAgB,mCACb,CACH,GAAI,eAAgBpB,EAAQ,CAAC,EAC3B,OAAOA,EAAQ,OACb,CAACqB,EAAMC,IAAajD,EAAAC,EAAA,GACfgD,GADe,CAElB,WAAY,GAAGD,EAAK,UAAU,GAAGC,EAAQ,UAAU,EACrD,GACA,CAAC,CACH,EAGF,GAAIF,IAAkB,4BACpB,OAAOF,EAAuBlB,CAAO,EAEvC,GAAI,SAAUA,EAAQ,CAAC,EAAE,QAAQ,CAAC,EAAG,CACnC,IAAIhC,EAAW,GACf,QAAW6C,KAAUb,EACnBhC,EAAW,GAAGA,CAAQ,GAAG6C,EAAO,QAAQ,CAAC,EAAE,IAAI,GAEjD,IAAMU,EAAe,gBAAgBvB,EAAQ,GAAG,EAAE,CAAC,EACnD,OAAAuB,EAAa,QAAQ,CAAC,EAAE,KAAOvD,EACxBuD,CACT,CAEA,GAAI,UAAWvB,EAAQ,CAAC,EAAE,QAAQ,CAAC,EAAG,CACpC,IAAMhC,EAAW+B,EAAiBC,CAAO,EACzC,OAAAhC,EAAS,QAAQ,CAAC,EAAIM,IAAA,GACjBN,EAAS,QAAQ,CAAC,GAClBA,EAAS,QAAQ,CAAC,EAAE,SAElBA,CACT,CAEA,MAAO,EACT,EAEA,SAAgBF,GACdH,EACA6D,EACA5D,EACA,QAAA6D,EAAA,sBACA,IAAMzB,EAAU,CAAC,EACjB,YAAA0B,EAAAC,EAA0BH,GAA1BI,EAAAC,EAAA/B,EAAA8B,EAAA,EAAAC,EAAA,UAAAC,EAAAJ,EAAA,cAAAE,EAAA,GACE,CADS,IAAMzC,EAAjB0C,EAAA,MACE,MAAMjE,EAAK,aAAe,CAACuB,EAAO,IAAI,EAAIA,EAC1Ca,EAAQ,KAAKb,CAAK,SAFpB0C,EA1iBF,CA0iBE/B,EAAA,CAAA+B,UAAA,KAAAD,IAAAC,EAAAH,EAAA,oBAAAI,EAAAD,EAAA,KAAAH,YAAA,IAAA5B,EAAA,MAAAA,EAAA,IAIA,IAAMiC,EAAmBZ,GAAenB,EAASpC,EAAK,aAAa,EAC7DI,EAAW,UAAA8D,EAAM/D,GAAsBJ,EAAQU,EAAAC,EAAA,GAChDV,GADgD,CAEnD,iBAAAmE,EACA,iBAAkB,IAAI,KAAK,EAAE,YAAY,CAC3C,EAAC,GACD,GAAI/D,GACEJ,EAAK,aAAc,CACrB,IAAMoE,EAAchE,EAAiB,CAAC,EAEtC,KAAM,CADagC,EAAQ,GAAG,EAAE,EACbgC,CAAU,CAC/B,CAEJ,GAEA,IAAM9D,EAAoB,CAAC6D,EAAuBE,IAAyB,CACzE,GAAI,CACF,QAAQ,KAAK,GAAGA,CAAY,KAAKF,EAAiB,OAAO,EAAE,CAC7D,OAAS5D,EAAG,CACV,QAAQ,KAAK,GAAG8D,CAAY,KAAKF,CAAgB,EAAE,CACrD,CACF,EAEMG,GAAsBtE,GAAuBC,EAAA,wBACjD,GAAI,CACF,IAAMG,EAAW,MAAM,MAAM,GAAGP,CAAmB,iBAAkB,CACnE,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUG,CAAI,CAC3B,CAAC,EACD,OAAII,EAAS,SAAW,KACtBE,EACEF,EACA,mFACF,EACKA,EAAS,KAAK,CACvB,OAAS,EAAG,CACV,QAAQ,KACN,4EAA4E,CAAC,EAC/E,CACF,CACA,MAAO,CAAC,CACV,GAEMmE,EAA0BnC,GAA0B,CACxD,IAAMhC,EAAuB,CAC3B,GAAI,GACJ,QAAS,CACP,CACE,cAAe,OACf,MAAO,EACP,KAAM,GACN,SAAU,IACZ,CACF,EACA,QAAS,KAAK,IAAI,EAClB,MAAO,GACP,OAAQ,iBACV,EACM2C,EAAaX,EAAQ,GAAG,EAAE,EAChC,GAAI,CAACW,EAAY,OAAO3C,EACxB,IAAIoE,EAAO,GACX,QAAWvB,KAAUb,EACfa,EAAO,QAAQ,OAAS,GAAKA,EAAO,QAAQ,CAAC,EAAE,OACjDuB,EAAO,GAAGA,CAAI,GAAGvB,EAAO,QAAQ,CAAC,EAAE,IAAI,IAG3C,OAAA7C,EAAS,QAAQ,CAAC,EAAE,KAAOoE,EAC3BpE,EAAS,GAAK2C,EAAW,GACzB3C,EAAS,QAAU2C,EAAW,QAC9B3C,EAAS,MAAQ2C,EAAW,MAC5B3C,EAAS,mBAAqB2C,EAAW,mBACzC3C,EAAS,MAAQ2C,EAAW,MACrB3C,CACT,EAEMqE,GAA6BrC,GAAmC,CACpE,IAAMhC,EAAgC,CACpC,WAAY,GACZ,GAAI,GACJ,MAAO,GACP,YAAa,GACb,KAAM,YACR,EACM2C,EAAaX,EAAQ,GAAG,EAAE,EAChC,GAAI,CAACW,EAAY,OAAO3C,EACxB,IAAIsE,EAAa,GACjB,QAAWzB,KAAUb,EACnBsC,EAAa,GAAGA,CAAU,GAAGzB,EAAO,UAAU,GAEhD,OAAA7C,EAAS,WAAasE,EACtBtE,EAAS,GAAK2C,EAAW,GACzB3C,EAAS,MAAQ2C,EAAW,MAC5B3C,EAAS,YAAc2C,EAAW,YAC3B3C,CACT,EAEA,SAAgBuE,GACdf,EACAgB,EACAC,EACA,QAAAhB,EAAA,sBACA,IAAMxD,EAIF,CACF,WAAY,KACZ,aAAc,KACd,iBAAkB,IACpB,EACM+B,EAAU,CAAC,EACjB,YAAA0B,EAAAC,EAA2BH,GAA3BI,EAAAC,EAAA/B,EAAA8B,EAAA,EAAAC,EAAA,UAAAC,EAAAJ,EAAA,cAAAE,EAAA,GACE,CADS,IAAMf,EAAjBgB,EAAA,MACE7B,EAAQ,KAAKa,CAAM,EACnB5C,EAAK,aAAe4C,EACpB,MAAM5C,SAHR4D,EAhqBF,CAgqBE/B,EAAA,CAAA+B,UAAA,KAAAD,IAAAC,EAAAH,EAAA,oBAAAI,EAAAD,EAAA,KAAAH,YAAA,IAAA5B,EAAA,MAAAA,EAAA,IAKA,IAAMiC,EAAmBU,EAAWzC,CAAO,EACrChC,EAAW,UAAA8D,EAAMU,EAAY,CAAE,iBAAAT,CAAiB,CAAC,GACvD9D,EAAK,WAAaD,EAAS,WAC3BC,EAAK,iBAAmBD,EAAS,iBACjC,MAAMC,CACR,GAEA,IAAMyE,GAAoB,CAAOC,EAAoBC,IAAgB/E,EAAA,wBACnE,OAAO8E,EAAO,KAAK,YAAY,OAAOC,CAAM,CAC9C,GAEMC,GAA2B,CAAOF,EAAoBC,IAAgB/E,EAAA,wBAC1E,OAAO8E,EAAO,YAAY,OAAOC,CAAM,CACzC,GAEME,GAA8B,CAClC,KAAMJ,GACN,WAAYG,EACd,EAEME,GAAgB,CACpBC,EACAJ,IACG/E,EAAA,wBACH,IAAMoF,EAAS,EAAQ,QAAQ,EAAE,QAC3BN,EAAS,IAAIM,EAAO,CACxB,QAASL,EAAO,OAClB,CAAC,EACKM,EACJJ,GAA4BE,EAAgB,gBAAgB,IAAI,EAClE,OAAOE,EAAcP,EAAQC,CAAM,CACrC,GAEMO,GAAqB,CACzBH,EACAJ,IACG/E,EAAA,wBACH,IAAMoF,EAAS,EAAQ,QAAQ,EAAE,YAC3BN,EAAS,IAAIM,EAAO,CACxB,QAASL,EAAO,OAClB,CAAC,EACKM,EACJJ,GAA4BE,EAAgB,gBAAgB,IAAI,EAClE,OAAOE,EAAcP,EAAQC,CAAM,CACrC,GAEMQ,GAAuB,CAAOT,EAAuBC,IAAgB/E,EAAA,wBACzE,OAAO8E,EAAO,SAAS,OAAOC,CAAM,CACtC,GAEMS,GAA8B,CAClCV,EACAC,IACG/E,EAAA,wBACH,OAAO8E,EAAO,YAAY,OAAOC,CAAM,CACzC,GAEMU,GAAiC,CACrC,KAAMF,GACN,WAAYC,EACd,EAEME,GAAmB,CACvBP,EACAJ,IACG/E,EAAA,wBACH,IAAM2F,EAAY,EAAQ,mBAAmB,EAAE,QACzCb,EAAS,IAAIa,EAAU,CAC3B,QAASZ,EAAO,OAClB,CAAC,EACKM,EACJI,GAA+BN,EAAgB,gBAAgB,IAAI,EACrE,OAAOE,EAAcP,EAAQC,CAAM,CACrC,GAEMa,GAAiB,CACrB9F,EACAC,IAC+BC,EAAA,wBAC/B,GAAI,CACF,IAAMG,EAAW,MAAM,MAAM,GAAGP,CAAmB,eAAgB,CACjE,OAAQ,OACR,QAAS,CACP,YAAaE,EACb,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUC,CAAI,CAC3B,CAAC,EACD,OAAII,EAAS,SAAW,KACtBE,EACEF,EACA,yEACF,EACO,MAEFA,EAAS,KAAK,CACvB,OAASG,EAAG,CACV,eAAQ,KACN,4EAA4EA,CAAC,EAC/E,EACO,IACT,CACF,GCzwBO,IAAMuF,EAAN,KAAmB,CAGxB,YAAYC,EAAgB,CAI5B,YAAS,IAAMC,GAAuB,KAAK,MAAM,EAH/C,KAAK,OAASD,CAChB,CAGF,ECVA,UAAYE,OAAmB,qBAC/B,OAAQ,uBAAAC,OAA0B,gCAClC,OAAQ,sBAAAC,OAAyB,gCCFjC,OAAoB,YAAAC,EAAU,kBAAAC,MAAqB,qBAEnD,OAAQ,oBAAAC,MAAuB,sBAG/B,IAAMC,EAAN,KAAsD,CAKpD,YAAYC,EAAwBC,EAAiB,CACnD,KAAK,OAASA,GAAU,QAAQ,IAAI,oBACpC,KAAK,cAAgBD,EACrB,KAAK,IAAM,GAAGE,CAAmB,aACnC,CAEQ,mBAAmBC,EAAyD,CAClF,OAAKA,EACE,OAAO,YAAY,OAAO,QAAQA,CAAU,CAAC,EAD5B,CAAC,CAE3B,CAEQ,iBAAiBC,EAAwB,CAQ/C,MAP0C,CACxC,CAACC,EAAS,QAAQ,EAAG,oBACrB,CAACA,EAAS,MAAM,EAAG,kBACnB,CAACA,EAAS,MAAM,EAAG,kBACnB,CAACA,EAAS,QAAQ,EAAG,oBACrB,CAACA,EAAS,QAAQ,EAAG,mBACvB,EACeD,CAAI,GAAK,mBAC1B,CAEQ,mBAAmBE,EAA8B,CAMvD,MALkD,CAChD,CAACC,EAAe,KAAK,EAAG,mBACxB,CAACA,EAAe,EAAE,EAAG,gBACrB,CAACA,EAAe,KAAK,EAAG,kBAC1B,EACiBD,CAAI,GAAK,kBAC5B,CAEQ,cAAcE,EAAgC,CACpD,OAAQ,OAAOA,EAAK,CAAC,CAAC,EAAI,OAAO,GAAG,EAAI,OAAOA,EAAK,CAAC,CAAC,GAAG,SAAS,CACpE,CAEA,OAAOC,EAAkD,CACvD,GAAI,CAAC,KAAK,cACR,OAAO,QAAQ,QAAQC,EAAiB,OAAO,EAGjD,IAAMC,EAAcF,EAAM,IAAIG,GAAK,CAlDvC,IAAAC,EAkD2C,OACrC,KAAMD,EAAK,KACX,QAAS,CACP,SAAUA,EAAK,YAAY,EAAE,QAC7B,QAASA,EAAK,YAAY,EAAE,OAC5B,cAAaC,EAAAD,EAAK,YAAY,EAAE,aAAnB,YAAAC,EAA+B,cAAe,EAC7D,EACA,KAAM,KAAK,iBAAiBD,EAAK,IAAI,EACrC,UAAWA,EAAK,cAAgB,KAChC,WAAY,KAAK,cAAcA,EAAK,SAAS,EAC7C,SAAU,KAAK,cAAcA,EAAK,OAAO,EACzC,OAAQ,CACN,YAAa,KAAK,mBAAmBA,EAAK,OAAO,IAAI,EACrD,YAAaA,EAAK,OAAO,OAC3B,EACA,WAAY,KAAK,mBAAmBA,EAAK,UAAU,EACnD,OAAQA,EAAK,OAAO,IAAIE,IAAU,CAChC,KAAMA,EAAM,KACZ,UAAW,KAAK,cAAcA,EAAM,IAAI,EACxC,WAAY,KAAK,mBAAmBA,EAAM,UAAU,CACtD,EAAE,EACF,MAAOF,EAAK,MAAM,IAAIG,IAAS,CAC7B,QAASA,EAAK,QACd,WAAY,KAAK,mBAAmBA,EAAK,UAAU,CACrD,EAAE,EACF,SAAU,CACR,WAAYC,EAAAC,EAAA,GACPL,EAAK,SAAS,YADP,CAEV,eAAgB,iBAClB,GACA,WAAY,EACd,CACF,EAAE,EAEF,OAAO,MAAM,KAAK,IAAK,CACrB,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,YAAa,KAAK,QAAU,EAC9B,EACA,KAAM,KAAK,UAAU,CACnB,MAAOD,CACT,CAAC,CACH,CAAC,EACE,KAAKO,GACCA,EAAS,GAIPR,EAAiB,SAHtB,QAAQ,MAAM;AAAA,sBAA8CQ,EAAS,MAAM,EAAE,EACtER,EAAiB,OAG3B,EACA,MAAOS,IACN,QAAQ,MAAM,yBAA0BA,CAAK,EACtCT,EAAiB,OACzB,CACL,CAEA,UAA0B,CACxB,OAAO,QAAQ,QAAQ,CACzB,CACF,EAEOU,GAAQrB,ED3GR,IAAMsB,EAAY,CAACC,EAAe,uBAClB,SAAM,UAAUA,CAAI,EAG9BC,GAAe,CAACC,EAAwBC,IAAoB,CACvE,IAAMC,EAAW,IAAIC,GACfC,EAAW,IAAIC,GAAwBL,EAAeC,CAAM,EAC5DK,EAAY,IAAIC,GAAoBH,CAAQ,EAClDF,EAAS,iBAAiBI,CAAS,EACnCJ,EAAS,SAAS,CACpB,EEZA,IAAMM,GAASC,EAAU,EAEZC,EAAkB,CAC7BC,EACAC,EACAC,EAAgB,GAChBC,EAAW,WACR,CACH,IAAMC,EAA6B,CACjC,UAAW,CAACC,EAAQC,IAAS,CAC3B,IAAMC,EAAY,QAAQ,UAAUF,EAAQC,CAAI,EAChD,cAAO,iBAAiBC,EAAW,CACjC,cAAe,CACb,MAAOL,EACP,SAAU,EACZ,EACA,SAAU,CACR,MAAOC,CACT,CACF,CAAC,EACM,IAAI,MAAMI,EAAWH,CAAO,CACrC,EACA,IAAK,CAACC,EAAQG,EAAMC,IAAa,CAC/B,IAAMC,EAAQL,EAAOG,CAAI,EACnBN,EAAgB,GAAG,QAAQ,IAC/BG,EACA,eACF,CAAC,IAAIG,EAAK,SAAS,CAAC,GAEpB,OAAI,OAAOE,GAAU,UACnB,OAAO,iBAAiBA,EAAO,CAC7B,cAAe,CACb,MAAOR,EACP,SAAU,EACZ,EACA,SAAU,CACR,MAAOC,CACT,CACF,CAAC,EACM,IAAI,MAAMO,EAAON,CAAO,GAG7B,OAAOM,GAAU,WACZ,IAAIJ,IAAgB,CA9CnC,IAAAK,EAAAC,EAAAC,EAAAC,EA+CU,IAAMC,EAAqB,IAAI,KAAK,EAAE,YAAY,EAC5CC,EAAgB,QAAQ,IAAIX,EAAQ,UAAU,EAC9CY,GAAeN,EAAAL,EAAK,CAAC,IAAN,YAAAK,EAAS,aACxBO,GAAUN,EAAAN,EAAK,CAAC,IAAN,YAAAM,EAAS,QACzB,OAAAC,EAAOP,EAAK,CAAC,IAAb,aAAAO,EAAgB,cAChBC,EAAOR,EAAK,CAAC,IAAb,aAAAQ,EAAgB,QAETjB,GAAO,gBAAgB,GAAGmB,CAAa,IAAId,CAAa,GAAWiB,GAAcC,EAAA,wBACtF,GAAI,CACFD,EAAK,aAAa,iBAAkB,KAAK,UAAUb,CAAI,CAAC,EACxD,IAAMe,EAAW,QAAQ,MAAMX,EAAOL,EAAQC,CAAI,EAC5CgB,EAASH,EAAK,YAAY,EAAE,OAElC,OAAIE,aAAoB,QACf,IAAI,QAAQ,CAACE,EAASC,IAAW,CACtCH,EACG,KAAYI,GAAqBL,EAAA,wBAChC,IAAMC,EAAW,MAAMK,GAAsB1B,EAAQ,CACnD,QAASA,EACT,cAAAgB,EACA,cAAAd,EACA,mBAAAa,EACA,iBAAkB,IAAI,KAAK,EAAE,YAAY,EACzC,iBAAAU,EACA,OAAQnB,EAAK,CAAC,EACd,aAAAW,EACA,KAAMC,EACN,QAASI,CACX,CAAC,EAEDH,EAAK,aAAa,kBAAmB,KAAK,UAAUE,CAAQ,CAAC,EAC7DF,EAAK,aAAa,kBAAmB,SAAS,EAC9CA,EAAK,IAAI,EACTI,EAAQF,CAAQ,CAClB,EAAC,EACA,MAAOM,GAAU,CAChBR,EAAK,gBAAgBQ,CAAK,EAC1BR,EAAK,aAAa,kBAAmB,OAAO,EAC5CA,EAAK,IAAI,EACTK,EAAOG,CAAK,CACd,CAAC,CACL,CAAC,GAGHR,EAAK,aAAa,kBAAmB,KAAK,UAAUE,CAAQ,CAAC,EAC7DF,EAAK,aAAa,kBAAmB,SAAS,EAC9CA,EAAK,IAAI,EACFE,EACT,OAASM,EAAO,CACd,MAAAR,EAAK,gBAAgBQ,CAAK,EAC1BR,EAAK,aAAa,kBAAmB,OAAO,EAC5CA,EAAK,IAAI,EACHQ,CACR,CACF,EAAC,CACH,EAGK,QAAQ,IAAItB,EAAQG,EAAMC,CAAQ,CAC3C,CACF,EAEA,OAAO,IAAI,MAAMR,EAAKG,CAAO,CAC/B,EC9GA,UAAYwB,MAAmB,qBAGxB,IAAMC,GAAe,CAACC,EAAsBC,EAAgBC,IAC1D,YAAaC,EAAa,CAC/B,IAAMC,EAASC,EAAU,EAEnBC,EAAmBC,GAA6B,CACpD,GAAI,CACEL,GACF,OAAO,QAAQA,CAAU,EAAE,QAAQ,CAAC,CAACM,EAAKC,CAAK,IAAM,CACnDF,EAAK,aAAaC,EAAKC,CAAK,CAC9B,CAAC,EAGHF,EAAK,aAAa,iBAAkB,KAAK,UAAUJ,CAAI,CAAC,EACxD,IAAMO,EAAST,EAAK,GAAGE,CAAI,EAE3B,OAAIO,aAAkB,QACbA,EAAO,KAAMC,IAClBJ,EAAK,aAAa,kBAAmB,KAAK,UAAUI,CAAc,CAAC,EACnEJ,EAAK,UAAU,CAAE,KAAoB,iBAAe,EAAG,CAAC,EACjDI,EACR,EAAE,MAAOC,GAAU,CAClB,MAAAC,GAAYN,EAAMK,EAAOT,CAAI,EACvBS,CACR,CAAC,EAAE,QAAQ,IAAML,EAAK,IAAI,CAAC,GAE3BA,EAAK,aAAa,kBAAmB,KAAK,UAAUG,CAAM,CAAC,EAC3DH,EAAK,UAAU,CAAE,KAAoB,iBAAe,EAAG,CAAC,EACxDA,EAAK,IAAI,EACFG,EAEX,OAASE,EAAO,CACd,MAAAC,GAAYN,EAAMK,EAAOT,CAAI,EACvBS,CACR,CACF,EAEA,OAAOR,EAAO,gBAAgBJ,EAAcM,CAAe,CAC7D,EAGIO,GAAc,CAACN,EAA0BK,EAAYT,IAAgB,CACzEI,EAAK,aAAa,iBAAkB,KAAK,UAAUJ,CAAI,CAAC,EACxDI,EAAK,UAAU,CACb,KAAoB,iBAAe,MACnC,QAASK,aAAiB,MAAQA,EAAM,QAAU,eACpD,CAAC,EACDL,EAAK,IAAI,CACX,ECvCO,IAAMO,EAAN,KAAsB,CAG3B,YAAYC,EAAgB,CAI5B,SAAM,CAACC,EAAoBC,IACzBC,GAAkB,KAAK,OAAQF,EAAYC,CAAM,EAEnD,aAAWE,GACTC,GAAsB,KAAK,OAAQD,CAAI,EAEzC,SAAOF,GAAwBI,GAAsB,KAAK,OAAQJ,CAAM,EATtE,KAAK,OAASF,CAChB,CASF,ECjBA,IAAMO,GAAW,CAACC,EAAgBC,IAA0C,CAC1E,GAAI,EAAEA,EAAK,oBAAoB,QAC7B,MAAM,IAAI,MAAM,0CAA0C,EAE5D,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQF,EAAK,QAAQ,EACrD,GAAI,OAAOC,GAAQ,UAAY,OAAOC,GAAU,SAC9C,MAAM,IAAI,MACR,yEACF,EAGJ,OAAOC,GAAyBJ,EAAQC,CAAI,CAC9C,EAEMI,GAAQ,CAACL,EAAgBC,IAAuC,CACpE,GAAI,OAAOA,EAAK,OAAU,SACxB,MAAM,IAAI,MAAM,wBAAwB,EAE1C,GAAIA,EAAK,MAAQ,GAAKA,EAAK,MAAQ,IACjC,MAAM,IAAI,MAAM,2CAA2C,EAE7D,OAAOK,GAAsBN,EAAQC,CAAI,CAC3C,EAEMM,GAAS,CAACP,EAAgBC,IAAwC,CACtE,GAAI,EAAEA,EAAK,kCAAkC,QAC3C,MAAM,IAAI,MAAM,yDAAyD,EAE3E,OAAOO,GAAuBR,EAAQC,CAAI,CAC5C,EAEMQ,GAAQ,CAACT,EAAgBC,IAC7BS,GAAsBV,EAAQC,CAAI,EAEvBU,EAAN,KAAmB,CAGxB,YAAYX,EAAgB,CAI5B,WAASC,GAAqBQ,GAAM,KAAK,OAAQR,CAAI,EAErD,cAAYA,GAAwBF,GAAS,KAAK,OAAQE,CAAI,EAE9D,YAAUA,GAAsBM,GAAO,KAAK,OAAQN,CAAI,EAExD,WAASA,GAAqBI,GAAM,KAAK,OAAQJ,CAAI,EATnD,KAAK,OAASD,CAChB,CASF,ECpCA,UAAYY,OAAmB,qBAE/B,IAAMC,GAAgC,CACpC,OAAQ,CACN,KAAM,CACJ,cAAe,iCACf,gBAAiBC,CACnB,EACA,WAAY,CACV,cAAe,4BACf,gBAAiBC,CACnB,CACF,EACA,UAAW,CACT,KAAM,CACJ,cAAe,4BACf,gBAAiBC,CACnB,EACA,WAAY,CACV,cAAe,+BACf,gBAAiBC,EACnB,CACF,EACA,eAAgB,CACd,KAAM,CACJ,cAAe,6CACf,gBAAiBH,CACnB,EACA,WAAY,CACV,cAAe,wCACf,gBAAiBC,CACnB,CACF,CACF,EAEMG,GAAgD,CACpD,OAAQC,GACR,UAAWC,GACX,eAAgBC,EAClB,EAQaC,GAAN,KAAkB,CAQvB,YAAY,CACV,OAAAC,EAAS,QAAQ,IAAI,oBACrB,cAAAC,EAAgB,EAClB,EAAmB,CAAC,EAAG,CACrB,GAAID,IAAW,OACb,MAAM,IAAI,MACR,0HACF,EAGF,KAAK,OAASA,EACd,KAAK,cAAgBC,EACrB,KAAK,UAAY,IAAIC,EAAgBF,CAAM,EAC3C,KAAK,MAAQ,IAAIG,EAAaH,CAAM,EACpC,KAAK,MAAQ,IAAII,EAAaJ,CAAM,EACpC,KAAK,aAAeK,GAEhBJ,GACFK,GAAaL,EAAeD,CAAM,CAEtC,CAEA,IAAI,WAAY,CACd,GAAI,CACF,IAAMO,EAAS,EAAQ,mBAAmB,EAAE,QAC5C,OAAOC,EAAgB,KAAK,OAAQD,EAAQ,YAAa,WAAW,CACtE,OAAS,EAAG,CACV,QAAQ,MACN,8EACF,CACF,CACF,CAEA,IAAI,QAAS,CACX,GAAI,CACF,IAAMA,EAAS,EAAQ,QAAQ,EAAE,QACjC,OAAOC,EAAgB,KAAK,OAAQD,EAAQ,SAAU,QAAQ,CAChE,OAAS,EAAG,CACV,QAAQ,MACN,qEACF,CACF,CACF,CAEM,IAAIE,EASK,QAAAC,EAAA,yBATL,CACR,WAAAC,EACA,cAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,KAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EAAS,EACX,EAAe,CAGb,OAFeC,EAAU,EAEX,gBAAgB,kBAA0BC,GAASV,EAAA,sBAC/D,GAAI,CACF,IAAMW,EAAgB,CACpB,WAAAV,EACA,cAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,KAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,CACF,EACAE,EAAK,aAAa,iBAAkB,KAAK,UAAUC,CAAa,CAAC,EAEjE,IAAMC,EAAyBR,EACzBS,EAA6C,CACjD,MAAOV,EACP,QAASD,EACT,iBAAkBI,CACpB,EACIF,IAAgBS,EAAkB,gBAAkBT,GAExD,IAAMU,EAAkB,MAAM,KAAK,UAAU,IAC3Cb,EACAY,CACF,EAEA,GAAI,CAACC,EAAiB,MAAM,IAAI,MAAM,kBAAkB,EAExD,IAAMC,EAAiBD,EAAgB,gBACvC,GAAI,CAACA,EAAgB,WACnB,MAAM,IAAI,MACR,WAAWb,CAAU,oDACvB,EAGF,IAAMe,EAA0BF,EAAgB,SAChD,GAAI,CAACE,EACH,MAAM,IAAI,MACR,WAAWf,CAAU,kDACvB,EAGF,IAAMgB,EAAuBD,EAAwB,MACrD,GAAI,CAACC,EACH,MAAM,IAAI,MACR,WAAWhB,CAAU,wDACvB,EAGF,IAAMiB,EAAgBD,EAAqB,SAErCE,EAAqB,IAAI,KAAK,EAAE,YAAY,EAC5CC,EAASN,EAAgB,WACzBO,EACJzC,GACEsC,CACF,EAAEH,EAAe,IAAI,EACjBO,EAAgBD,EAAO,cAEvBE,EAAkBF,EAAO,gBACzBG,EAAmBvC,GAAyBiC,CAAa,EACzDO,EAAoBX,EAAgB,kBACtCW,IACFL,EAAO,QAAaK,EAAkB,KAExCL,EAAO,OAAYZ,EACfA,GAAU,CAAC,SAAU,cAAc,EAAE,SAASU,CAAa,IAC7DE,EAAO,eAAoB,CAAE,cAAe,EAAK,GAGnD,IAAMM,EAAW,MAAMF,EAAiBV,EAAiBM,CAAM,EAEzDO,EAAiBC,IAAiB,CACtC,IAAMC,GAAmB,IAAI,KAAK,EAAE,YAAY,EAChD,OAAOC,GAAaC,EAAA,CAClB,cAAAT,EACA,cAAAJ,EACA,KAAM,CAAC,EACP,OAAAE,EACA,KAAAf,EACA,mBAAAc,EACA,iBAAAU,GACA,QAAS,KAAK,OACd,SAAAvB,EACA,UAAWQ,EAAgB,GAC3B,eAAgBA,EAAgB,QAChC,uBAAAF,EACA,SAAUL,EACV,wBAAyB,GACzB,QAASG,EAAK,YAAY,EAAE,QACzBkB,GACJ,CACH,EAEA,GAAIpB,EACF,OAAOwB,GAAeN,EAAUC,EAAeJ,CAAe,EAChE,IAAMU,EAAa,MAAMN,EAAc,CAAE,iBAAkBD,CAAS,CAAC,EAE/DQ,EAAiB,CACrB,WAAYD,EAAW,WACvB,aAAcP,EACd,iBAAkBO,EAAW,gBAC/B,EACA,OAAAvB,EAAK,aAAa,kBAAmB,KAAK,UAAUwB,CAAc,CAAC,EAE5DA,CACT,OAASC,EAAO,CACd,MAAAzB,EAAK,UAAU,CACb,KAAoB,kBAAe,MACnC,QAASyB,aAAiB,MAAQA,EAAM,QAAU,eACpD,CAAC,EACKA,CACR,QAAE,CACAzB,EAAK,IAAI,CACX,CACF,EAAC,CACH,GAEM,YAAYX,EAM6B,QAAAC,EAAA,yBAN7B,CAChB,aAAAoC,EACA,eAAAhC,EAAiB,CAAC,EAClB,SAAAE,EAAW,CAAC,EACZ,kBAAA+B,EAAoB,KACpB,sBAAAC,EAAwB,IAC1B,EAA+C,CAC7C,GAAI,CASF,OARe,MAAMC,GAAmB,CACtC,cAAeH,EACf,gBAAiBhC,EACjB,SAAAE,EACA,oBAAqB+B,EACrB,wBAAyBC,EACzB,QAAS,KAAK,MAChB,CAAC,CAEH,OAASH,EAAO,CACd,MAAIA,aAAiB,OACnB,QAAQ,MAAM,0BAA2BA,EAAM,OAAO,EAChD,IAAI,MAAM,2BAA2BA,EAAM,OAAO,EAAE,IAE1D,QAAQ,MAAM,kCAAmCA,CAAK,EAChD,IAAI,MAAM,gCAAgC,EAEpD,CACF,GAEM,WAAWP,EAAkB,QAAA5B,EAAA,sBACjC,OAAOwC,GAAe,KAAK,OAAQZ,CAAI,CACzC,GACF","names":["URL_API_PROMPTLAYER","promptlayerApiHandler","apiKey","body","__async","proxyGenerator","promptLayerApiRequest","response","data","warnOnBadResponse","e","promptLayerTrackMetadata","__spreadProps","__spreadValues","promptLayerTrackScore","promptLayerTrackPrompt","promptLayerTrackGroup","promptLayerCreateGroup","getPromptTemplate","promptName","params","url","publishPromptTemplate","getAllPromptTemplates","_a","key","value","runWorkflowRequest","_0","workflow_name","input_variables","metadata","workflow_label_name","workflow_version_number","api_key","payload","errorData","error","openaiStreamChat","results","_b","_c","_d","_e","_f","_g","_h","_i","content","functionCall","lastResult","toolCalls","result","delta","toolCall","lastToolCall","firstChoice","anthropicStreamMessage","cleaned_result","function_name","prev","current","final_result","generator","__asyncGenerator","iter","__forAwait","more","temp","__await","request_response","request_id","main_message","trackRequest","openaiStreamCompletion","text","anthropicStreamCompletion","completion","streamResponse","afterStream","mapResults","openaiChatRequest","client","kwargs","openaiCompletionsRequest","MAP_TYPE_TO_OPENAI_FUNCTION","openaiRequest","promptBlueprint","OpenAI","requestToMake","azureOpenAIRequest","anthropicChatRequest","anthropicCompletionsRequest","MAP_TYPE_TO_ANTHROPIC_FUNCTION","anthropicRequest","Anthropic","utilLogRequest","GroupManager","apiKey","promptLayerCreateGroup","opentelemetry","SimpleSpanProcessor","NodeTracerProvider","SpanKind","SpanStatusCode","ExportResultCode","PromptLayerSpanExporter","enableTracing","apiKey","URL_API_PROMPTLAYER","attributes","kind","SpanKind","code","SpanStatusCode","time","spans","ExportResultCode","requestData","span","_a","event","link","__spreadProps","__spreadValues","response","error","span_exporter_default","getTracer","name","setupTracing","enableTracing","apiKey","provider","NodeTracerProvider","exporter","span_exporter_default","processor","SimpleSpanProcessor","tracer","getTracer","promptLayerBase","apiKey","llm","function_name","provider","handler","target","args","newTarget","prop","receiver","value","_a","_b","_c","_d","request_start_time","provider_type","return_pl_id","pl_tags","span","__async","response","spanId","resolve","reject","request_response","promptlayerApiHandler","error","opentelemetry","wrapWithSpan","functionName","func","attributes","args","tracer","getTracer","wrapperFunction","span","key","value","result","resolvedResult","error","handleError","TemplateManager","apiKey","promptName","params","getPromptTemplate","body","publishPromptTemplate","getAllPromptTemplates","metadata","apiKey","body","key","value","promptLayerTrackMetadata","score","promptLayerTrackScore","prompt","promptLayerTrackPrompt","group","promptLayerTrackGroup","TrackManager","opentelemetry","MAP_PROVIDER_TO_FUNCTION_NAME","openaiStreamChat","openaiStreamCompletion","anthropicStreamMessage","anthropicStreamCompletion","MAP_PROVIDER_TO_FUNCTION","openaiRequest","anthropicRequest","azureOpenAIRequest","PromptLayer","apiKey","enableTracing","TemplateManager","GroupManager","TrackManager","wrapWithSpan","setupTracing","module","promptLayerBase","_0","__async","promptName","promptVersion","promptReleaseLabel","inputVariables","tags","metadata","groupId","stream","getTracer","span","functionInput","prompt_input_variables","templateGetParams","promptBlueprint","promptTemplate","promptBlueprintMetadata","promptBlueprintModel","provider_type","request_start_time","kwargs","config","function_name","stream_function","request_function","provider_base_url","response","_trackRequest","body","request_end_time","trackRequest","__spreadValues","streamResponse","requestLog","functionOutput","error","workflowName","workflowLabelName","workflowVersionNumber","runWorkflowRequest","utilLogRequest"]}
package/dist/index.d.mts CHANGED
@@ -204,6 +204,19 @@ interface RequestLog {
204
204
  id: number;
205
205
  prompt_version: PromptBlueprint;
206
206
  }
207
+ interface WorkflowRequest {
208
+ workflowName: string;
209
+ inputVariables?: Record<string, any>;
210
+ metadata?: Record<string, string>;
211
+ workflowLabelName?: string | null;
212
+ workflowVersionNumber?: number | null;
213
+ }
214
+ interface WorkflowResponse {
215
+ success: boolean;
216
+ message?: string;
217
+ error?: string;
218
+ workflow_version_execution_id?: string;
219
+ }
207
220
 
208
221
  declare class GroupManager {
209
222
  apiKey: string;
@@ -254,6 +267,7 @@ declare class PromptLayer {
254
267
  raw_response: any;
255
268
  prompt_blueprint: any;
256
269
  }>;
270
+ runWorkflow({ workflowName, inputVariables, metadata, workflowLabelName, workflowVersionNumber, }: WorkflowRequest): Promise<WorkflowResponse>;
257
271
  logRequest(body: LogRequest): Promise<RequestLog | null>;
258
272
  }
259
273
 
package/dist/index.d.ts CHANGED
@@ -204,6 +204,19 @@ interface RequestLog {
204
204
  id: number;
205
205
  prompt_version: PromptBlueprint;
206
206
  }
207
+ interface WorkflowRequest {
208
+ workflowName: string;
209
+ inputVariables?: Record<string, any>;
210
+ metadata?: Record<string, string>;
211
+ workflowLabelName?: string | null;
212
+ workflowVersionNumber?: number | null;
213
+ }
214
+ interface WorkflowResponse {
215
+ success: boolean;
216
+ message?: string;
217
+ error?: string;
218
+ workflow_version_execution_id?: string;
219
+ }
207
220
 
208
221
  declare class GroupManager {
209
222
  apiKey: string;
@@ -254,6 +267,7 @@ declare class PromptLayer {
254
267
  raw_response: any;
255
268
  prompt_blueprint: any;
256
269
  }>;
270
+ runWorkflow({ workflowName, inputVariables, metadata, workflowLabelName, workflowVersionNumber, }: WorkflowRequest): Promise<WorkflowResponse>;
257
271
  logRequest(body: LogRequest): Promise<RequestLog | null>;
258
272
  }
259
273
 
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var qe=Object.create;var I=Object.defineProperty,Ee=Object.defineProperties,Le=Object.getOwnPropertyDescriptor,xe=Object.getOwnPropertyDescriptors,$e=Object.getOwnPropertyNames,Z=Object.getOwnPropertySymbols,ve=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty,We=Object.prototype.propertyIsEnumerable;var ee=(r,e)=>{if(e=Symbol[r])return e;throw Error("Symbol."+r+" is not defined")};var te=(r,e,t)=>e in r?I(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,y=(r,e)=>{for(var t in e||(e={}))re.call(e,t)&&te(r,t,e[t]);if(Z)for(var t of Z(e))We.call(e,t)&&te(r,t,e[t]);return r},S=(r,e)=>Ee(r,xe(e));var Ge=(r,e)=>{for(var t in e)I(r,t,{get:e[t],enumerable:!0})},oe=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $e(e))!re.call(r,n)&&n!==t&&I(r,n,{get:()=>e[n],enumerable:!(o=Le(e,n))||o.enumerable});return r};var M=(r,e,t)=>(t=r!=null?qe(ve(r)):{},oe(e||!r||!r.__esModule?I(t,"default",{value:r,enumerable:!0}):t,r)),je=r=>oe(I({},"__esModule",{value:!0}),r);var c=(r,e,t)=>new Promise((o,n)=>{var a=i=>{try{p(t.next(i))}catch(u){n(u)}},s=i=>{try{p(t.throw(i))}catch(u){n(u)}},p=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,s);p((t=t.apply(r,e)).next())}),b=function(r,e){this[0]=r,this[1]=e},U=(r,e,t)=>{var o=(s,p,i,u)=>{try{var m=t[s](p),d=(p=m.value)instanceof b,f=m.done;Promise.resolve(d?p[0]:p).then(l=>d?o(s==="return"?s:"next",p[1]?{done:l.done,value:l.value}:l,i,u):i({value:l,done:f})).catch(l=>o("throw",l,i,u))}catch(l){u(l)}},n=s=>a[s]=p=>new Promise((i,u)=>o(s,p,i,u)),a={};return t=t.apply(r,e),a[Symbol.asyncIterator]=()=>a,n("next"),n("throw"),n("return"),a};var J=(r,e,t)=>(e=r[ee("asyncIterator")])?e.call(r):(r=r[ee("iterator")](),e={},t=(o,n)=>(n=r[o])&&(e[o]=a=>new Promise((s,p,i)=>(a=n.call(r,a),i=a.done,Promise.resolve(a.value).then(u=>s({value:u,done:i}),p)))),t("next"),t("return"),e);var tt={};Ge(tt,{PromptLayer:()=>H});module.exports=je(tt);var g=process.env.URL_API_PROMPTLAYER||"https://api.promptlayer.com",ne=(r,e)=>c(void 0,null,function*(){return e.request_response[Symbol.asyncIterator]!==void 0?Me(r,e.request_response,e):yield ae(r,e)}),ae=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),o=yield t.json();if(t.status!==200&&P(o,"WARNING: While logging your request, PromptLayer experienced the following error:"),o&&e.return_pl_id)return[e.request_response,o.request_id]}catch(t){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${t}`)}return e.request_response}),se=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/library-track-metadata`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S(y({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return P(o,"WARNING: While logging metadata to your request, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${t}`),!1}return!0}),ie=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/library-track-score`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S(y({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return P(o,"WARNING: While scoring your request, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While scoring your request, PromptLayer experienced the following error: ${t}`),!1}return!0}),pe=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/library-track-prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S(y({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return P(o,"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${t}`),!1}return!0}),ce=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/track-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S(y({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return P(o,"WARNING: While associating your request with a group, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While associating your request with a group, PromptLayer experienced the following error: ${t}`),!1}return!0}),le=r=>c(void 0,null,function*(){try{let e=yield fetch(`${g}/create-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r})}),t=yield e.json();return e.status!==200?(P(t,"WARNING: While creating a group PromptLayer had the following error"),!1):t.id}catch(e){return console.warn(`WARNING: While creating a group PromptLayer had the following error: ${e}`),!1}}),ue=(r,e,t)=>c(void 0,null,function*(){try{let o=new URL(`${g}/prompt-templates/${e}`),n=yield fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify(t)}),a=yield n.json();return n.status!==200?(P(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):(a.warning&&console.warn(`WARNING: While tracking your prompt PromptLayer had the following error: ${a.warning}`),a)}catch(o){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${o}`),null}}),me=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/rest/prompt-templates`,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify({prompt_template:y({},e),prompt_version:y({},e),release_labels:e.release_labels?e.release_labels:void 0})}),o=yield t.json();return t.status===400&&P(o,"WARNING: While publishing a prompt template PromptLayer had the following error"),o}catch(t){console.warn(`WARNING: While publishing a prompt template PromptLayer had the following error: ${t}`)}}),he=(r,e)=>c(void 0,null,function*(){var t;try{let o=new URL(`${g}/prompt-templates`);Object.entries(e||{}).forEach(([s,p])=>o.searchParams.append(s,p.toString()));let n=yield fetch(o,{headers:{"Content-Type":"application/json","X-API-KEY":r}}),a=yield n.json();return n.status!==200?(P(a,"WARNING: While fetching all prompt templates PromptLayer had the following error"),null):(t=a.items)!=null?t:[]}catch(o){return console.warn(`WARNING: While fetching all prompt templates PromptLayer had the following error: ${o}`),null}}),Y=r=>{var s,p,i,u,m;let e=null,t,o={id:"",choices:[],created:Date.now(),model:"",object:"chat.completion"},n=r.at(-1);if(!n)return o;let a;for(let d of r){if(d.choices.length===0)continue;let f=d.choices[0].delta;f.content&&(e=`${e||""}${f.content||""}`),f.function_call&&(t={name:`${t?t.name:""}${f.function_call.name||""}`,arguments:`${t?t.arguments:""}${f.function_call.arguments||""}`});let l=(s=f.tool_calls)==null?void 0:s[0];if(l){a=a||[];let T=a.at(-1);if(!T||l.id){a.push({id:l.id||"",type:l.type||"function",function:{name:((p=l.function)==null?void 0:p.name)||"",arguments:((i=l.function)==null?void 0:i.arguments)||""}});continue}T.function.name=`${T.function.name}${((u=l.function)==null?void 0:u.name)||""}`,T.function.arguments=`${T.function.arguments}${((m=l.function)==null?void 0:m.arguments)||""}`}}return o.choices.push({finish_reason:r[0].choices[0].finish_reason||"stop",index:r[0].choices[0].index||0,logprobs:r[0].choices[0].logprobs||null,message:{role:"assistant",content:e,function_call:t||void 0,tool_calls:a||void 0}}),o.id=n.id,o.model=n.model,o.created=n.created,o.system_fingerprint=n.system_fingerprint,o.usage=n.usage,o},D=r=>{let e={id:"",model:"",content:[],role:"assistant",type:"message",stop_reason:"stop_sequence",stop_sequence:null,usage:{input_tokens:0,output_tokens:0}};if(!r.at(-1))return e;let o="";for(let n of r)switch(n.type){case"message_start":{e=y({},n.message);break}case"content_block_delta":n.delta.type==="text_delta"&&(o=`${o}${n.delta.text}`);case"message_delta":"usage"in n&&(e.usage.output_tokens=n.usage.output_tokens),"stop_reason"in n.delta&&(e.stop_reason=n.delta.stop_reason);default:break}return e.content.push({type:"text",text:o}),e},Ke=(r,e="openai.chat.completions.create")=>{if("completion"in r[0])return r.reduce((t,o)=>S(y({},o),{completion:`${t.completion}${o.completion}`}),{});if(e==="anthropic.messages.create")return D(r);if("text"in r[0].choices[0]){let t="";for(let n of r)t=`${t}${n.choices[0].text}`;let o=structuredClone(r.at(-1));return o.choices[0].text=t,o}if("delta"in r[0].choices[0]){let t=Y(r);return t.choices[0]=y(y({},t.choices[0]),t.choices[0].message),t}return""};function Me(r,e,t){return U(this,null,function*(){let o=[];try{for(var s=J(e),p,i,u;p=!(i=yield new b(s.next())).done;p=!1){let m=i.value;yield t.return_pl_id?[m,null]:m,o.push(m)}}catch(i){u=[i]}finally{try{p&&(i=s.return)&&(yield new b(i.call(s)))}finally{if(u)throw u[0]}}let n=Ke(o,t.function_name),a=yield new b(ae(r,S(y({},t),{request_response:n,request_end_time:new Date().toISOString()})));if(a&&t.return_pl_id){let m=a[1];yield[o.at(-1),m]}})}var P=(r,e)=>{try{console.warn(`${e}: ${r.message}`)}catch(t){console.warn(`${e}: ${r}`)}},de=r=>c(void 0,null,function*(){try{let e=yield fetch(`${g}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return e.status!==200&&P(e,"WARNING: While logging your request, PromptLayer experienced the following error:"),e.json()}catch(e){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${e}`)}return{}}),fe=r=>{let e={id:"",choices:[{finish_reason:"stop",index:0,text:"",logprobs:null}],created:Date.now(),model:"",object:"text_completion"},t=r.at(-1);if(!t)return e;let o="";for(let n of r)n.choices.length>0&&n.choices[0].text&&(o=`${o}${n.choices[0].text}`);return e.choices[0].text=o,e.id=t.id,e.created=t.created,e.model=t.model,e.system_fingerprint=t.system_fingerprint,e.usage=t.usage,e},ye=r=>{let e={completion:"",id:"",model:"",stop_reason:"",type:"completion"},t=r.at(-1);if(!t)return e;let o="";for(let n of r)o=`${o}${n.completion}`;return e.completion=o,e.id=t.id,e.model=t.model,e.stop_reason=t.stop_reason,e};function ge(r,e,t){return U(this,null,function*(){let o={request_id:null,raw_response:null,prompt_blueprint:null},n=[];try{for(var p=J(r),i,u,m;i=!(u=yield new b(p.next())).done;i=!1){let d=u.value;n.push(d),o.raw_response=d,yield o}}catch(u){m=[u]}finally{try{i&&(u=p.return)&&(yield new b(u.call(p)))}finally{if(m)throw m[0]}}let a=t(n),s=yield new b(e({request_response:a}));o.request_id=s.request_id,o.prompt_blueprint=s.prompt_blueprint,yield o})}var Ue=(r,e)=>c(void 0,null,function*(){return r.chat.completions.create(e)}),Je=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),Ye={chat:Ue,completion:Je},_e=(r,e)=>c(void 0,null,function*(){let t=require("openai").default,o=new t({baseURL:e.baseURL}),n=Ye[r.prompt_template.type];return n(o,e)}),De=(r,e)=>c(void 0,null,function*(){return r.messages.create(e)}),Be=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),Fe={chat:De,completion:Be},Pe=(r,e)=>c(void 0,null,function*(){let t=require("@anthropic-ai/sdk").default,o=new t({baseURL:e.baseURL}),n=Fe[r.prompt_template.type];return n(o,e)}),Te=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${g}/log-request`,{method:"POST",headers:{"X-API-KEY":r,"Content-Type":"application/json"},body:JSON.stringify(e)});return t.status!==201?(P(t,"WARNING: While logging your request PromptLayer had the following error"),null):t.json()}catch(t){return console.warn(`WARNING: While tracking your prompt PromptLayer had the following error: ${t}`),null}});var $=class{constructor(e){this.create=()=>le(this.apiKey);this.apiKey=e}};var Re=M(require("@opentelemetry/api")),Se=require("@opentelemetry/sdk-trace-base"),be=require("@opentelemetry/sdk-trace-node");var w=require("@opentelemetry/api"),q=require("@opentelemetry/core");var B=class{constructor(e,t){this.apiKey=t||process.env.PROMPTLAYER_API_KEY,this.enableTracing=e,this.url=`${g}/spans-bulk`}attributesToObject(e){return e?Object.fromEntries(Object.entries(e)):{}}spanKindToString(e){return{[w.SpanKind.INTERNAL]:"SpanKind.INTERNAL",[w.SpanKind.SERVER]:"SpanKind.SERVER",[w.SpanKind.CLIENT]:"SpanKind.CLIENT",[w.SpanKind.PRODUCER]:"SpanKind.PRODUCER",[w.SpanKind.CONSUMER]:"SpanKind.CONSUMER"}[e]||"SpanKind.INTERNAL"}statusCodeToString(e){return{[w.SpanStatusCode.ERROR]:"StatusCode.ERROR",[w.SpanStatusCode.OK]:"StatusCode.OK",[w.SpanStatusCode.UNSET]:"StatusCode.UNSET"}[e]||"StatusCode.UNSET"}toNanoseconds(e){return(BigInt(e[0])*BigInt(1e9)+BigInt(e[1])).toString()}export(e){if(!this.enableTracing)return Promise.resolve(q.ExportResultCode.SUCCESS);let t=e.map(o=>{var n;return{name:o.name,context:{trace_id:o.spanContext().traceId,span_id:o.spanContext().spanId,trace_state:((n=o.spanContext().traceState)==null?void 0:n.serialize())||""},kind:this.spanKindToString(o.kind),parent_id:o.parentSpanId||null,start_time:this.toNanoseconds(o.startTime),end_time:this.toNanoseconds(o.endTime),status:{status_code:this.statusCodeToString(o.status.code),description:o.status.message},attributes:this.attributesToObject(o.attributes),events:o.events.map(a=>({name:a.name,timestamp:this.toNanoseconds(a.time),attributes:this.attributesToObject(a.attributes)})),links:o.links.map(a=>({context:a.context,attributes:this.attributesToObject(a.attributes)})),resource:{attributes:S(y({},o.resource.attributes),{"service.name":"prompt-layer-js"}),schema_url:""}}});return fetch(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey||""},body:JSON.stringify({spans:t})}).then(o=>o.ok?q.ExportResultCode.SUCCESS:(console.error(`Error exporting spans
2
- HTTP error! status: ${o.status}`),q.ExportResultCode.FAILED)).catch(o=>(console.error("Error exporting spans:",o),q.ExportResultCode.FAILED))}shutdown(){return Promise.resolve()}},we=B;var N=(r="promptlayer-tracer")=>Re.trace.getTracer(r),Ae=(r,e)=>{let t=new be.NodeTracerProvider,o=new we(r,e),n=new Se.SimpleSpanProcessor(o);t.addSpanProcessor(n),t.register()};var He=N(),F=(r,e,t="",o="openai")=>{let n={construct:(a,s)=>{let p=Reflect.construct(a,s);return Object.defineProperties(p,{function_name:{value:t,writable:!0},provider:{value:o}}),new Proxy(p,n)},get:(a,s,p)=>{let i=a[s],u=`${Reflect.get(a,"function_name")}.${s.toString()}`;return typeof i=="object"?(Object.defineProperties(i,{function_name:{value:u,writable:!0},provider:{value:o}}),new Proxy(i,n)):typeof i=="function"?(...m)=>{var _,E,O,k;let d=new Date().toISOString(),f=Reflect.get(a,"provider"),l=(_=m[0])==null?void 0:_.return_pl_id,T=(E=m[0])==null?void 0:E.pl_tags;return(O=m[0])==null||delete O.return_pl_id,(k=m[0])==null||delete k.pl_tags,He.startActiveSpan(`${f}.${u}`,h=>c(void 0,null,function*(){try{h.setAttribute("function_input",JSON.stringify(m));let R=Reflect.apply(i,a,m),A=h.spanContext().spanId;return R instanceof Promise?new Promise((L,j)=>{R.then(C=>c(void 0,null,function*(){let x=yield ne(r,{api_key:r,provider_type:f,function_name:u,request_start_time:d,request_end_time:new Date().toISOString(),request_response:C,kwargs:m[0],return_pl_id:l,tags:T,span_id:A});h.setAttribute("function_output",JSON.stringify(x)),h.setAttribute("response_status","success"),h.end(),L(x)})).catch(C=>{h.recordException(C),h.setAttribute("response_status","error"),h.end(),j(C)})}):(h.setAttribute("function_output",JSON.stringify(R)),h.setAttribute("response_status","success"),h.end(),R)}catch(R){throw h.recordException(R),h.setAttribute("response_status","error"),h.end(),R}}))}:Reflect.get(a,s,p)}};return new Proxy(e,n)};var v=M(require("@opentelemetry/api"));var Ne=(r,e,t)=>function(...o){let n=N(),a=s=>{try{t&&Object.entries(t).forEach(([i,u])=>{s.setAttribute(i,u)}),s.setAttribute("function_input",JSON.stringify(o));let p=e(...o);return p instanceof Promise?p.then(i=>(s.setAttribute("function_output",JSON.stringify(i)),s.setStatus({code:v.SpanStatusCode.OK}),i)).catch(i=>{throw Ce(s,i,o),i}).finally(()=>s.end()):(s.setAttribute("function_output",JSON.stringify(p)),s.setStatus({code:v.SpanStatusCode.OK}),s.end(),p)}catch(p){throw Ce(s,p,o),p}};return n.startActiveSpan(r,a)},Ce=(r,e,t)=>{r.setAttribute("function_input",JSON.stringify(t)),r.setStatus({code:v.SpanStatusCode.ERROR,message:e instanceof Error?e.message:"Unknown error"}),r.end()};var W=class{constructor(e){this.get=(e,t)=>ue(this.apiKey,e,t);this.publish=e=>me(this.apiKey,e);this.all=e=>he(this.apiKey,e);this.apiKey=e}};var Xe=(r,e)=>{if(!(e.metadata instanceof Object))throw new Error("Please provide a dictionary of metadata.");for(let[t,o]of Object.entries(e.metadata))if(typeof t!="string"||typeof o!="string")throw new Error("Please provide a dictionary of metadata with key value pair of strings.");return se(r,e)},ze=(r,e)=>{if(typeof e.score!="number")throw new Error("Score must be a number");if(e.score<0||e.score>100)throw new Error("Score must be a number between 0 and 100.");return ie(r,e)},Ve=(r,e)=>{if(!(e.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return pe(r,e)},Qe=(r,e)=>ce(r,e),G=class{constructor(e){this.group=e=>Qe(this.apiKey,e);this.metadata=e=>Xe(this.apiKey,e);this.prompt=e=>Ve(this.apiKey,e);this.score=e=>ze(this.apiKey,e);this.apiKey=e}};var Oe=M(require("@opentelemetry/api"));var Ze={openai:{chat:{function_name:"openai.chat.completions.create",stream_function:Y},completion:{function_name:"openai.completions.create",stream_function:fe}},anthropic:{chat:{function_name:"anthropic.messages.create",stream_function:D},completion:{function_name:"anthropic.completions.create",stream_function:ye}}},et={openai:_e,anthropic:Pe},H=class{constructor({apiKey:e=process.env.PROMPTLAYER_API_KEY,enableTracing:t=!1}={}){if(e===void 0)throw new Error("PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.");this.apiKey=e,this.enableTracing=t,this.templates=new W(e),this.group=new $(e),this.track=new G(e),this.wrapWithSpan=Ne,t&&Ae(t,e)}get Anthropic(){try{let e=require("@anthropic-ai/sdk").default;return F(this.apiKey,e,"anthropic","anthropic")}catch(e){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}get OpenAI(){try{let e=require("openai").default;return F(this.apiKey,e,"openai","openai")}catch(e){console.error("To use the OpenAI module, you must install the @openai/api package.")}}run(u){return c(this,arguments,function*({promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i=!1}){return N().startActiveSpan("PromptLayer Run",d=>c(this,null,function*(){try{let f={promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i};d.setAttribute("function_input",JSON.stringify(f));let l=n,T={label:o,version:t,metadata_filters:s};n&&(T.input_variables=n);let _=yield this.templates.get(e,T);if(!_)throw new Error("Prompt not found");let E=_.prompt_template;if(!_.llm_kwargs)throw new Error(`Prompt '${e}' does not have any LLM kwargs associated with it.`);let O=_.metadata;if(!O)throw new Error(`Prompt '${e}' does not have any metadata associated with it.`);let k=O.model;if(!k)throw new Error(`Prompt '${e}' does not have a model parameters associated with it.`);let h=k.provider,R=new Date().toISOString(),A=_.llm_kwargs,L=Ze[h][E.type],j=L.function_name,C=L.stream_function,x=et[h],X=_.provider_base_url;X&&(A.baseURL=X.url),A.stream=i,i&&h==="openai"&&(A.stream_options={include_usage:!0});let K=yield x(_,A),z=ke=>{let Ie=new Date().toISOString();return de(y({function_name:j,provider_type:h,args:[],kwargs:A,tags:a,request_start_time:R,request_end_time:Ie,api_key:this.apiKey,metadata:s,prompt_id:_.id,prompt_version:_.version,prompt_input_variables:l,group_id:p,return_prompt_blueprint:!0,span_id:d.spanContext().spanId},ke))};if(i)return ge(K,z,C);let V=yield z({request_response:K}),Q={request_id:V.request_id,raw_response:K,prompt_blueprint:V.prompt_blueprint};return d.setAttribute("function_output",JSON.stringify(Q)),Q}catch(f){throw d.setStatus({code:Oe.SpanStatusCode.ERROR,message:f instanceof Error?f.message:"Unknown error"}),f}finally{d.end()}}))})}logRequest(e){return c(this,null,function*(){return Te(this.apiKey,e)})}};0&&(module.exports={PromptLayer});
1
+ "use strict";var xe=Object.create;var q=Object.defineProperty,$e=Object.defineProperties,We=Object.getOwnPropertyDescriptor,ve=Object.getOwnPropertyDescriptors,Ge=Object.getOwnPropertyNames,ee=Object.getOwnPropertySymbols,je=Object.getPrototypeOf,oe=Object.prototype.hasOwnProperty,Ke=Object.prototype.propertyIsEnumerable;var te=(r,e)=>{if(e=Symbol[r])return e;throw Error("Symbol."+r+" is not defined")};var re=(r,e,t)=>e in r?q(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,h=(r,e)=>{for(var t in e||(e={}))oe.call(e,t)&&re(r,t,e[t]);if(ee)for(var t of ee(e))Ke.call(e,t)&&re(r,t,e[t]);return r},b=(r,e)=>$e(r,ve(e));var Me=(r,e)=>{for(var t in e)q(r,t,{get:e[t],enumerable:!0})},ne=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ge(e))!oe.call(r,n)&&n!==t&&q(r,n,{get:()=>e[n],enumerable:!(o=We(e,n))||o.enumerable});return r};var U=(r,e,t)=>(t=r!=null?xe(je(r)):{},ne(e||!r||!r.__esModule?q(t,"default",{value:r,enumerable:!0}):t,r)),Ue=r=>ne(q({},"__esModule",{value:!0}),r);var c=(r,e,t)=>new Promise((o,n)=>{var a=i=>{try{p(t.next(i))}catch(m){n(m)}},s=i=>{try{p(t.throw(i))}catch(m){n(m)}},p=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,s);p((t=t.apply(r,e)).next())}),k=function(r,e){this[0]=r,this[1]=e},J=(r,e,t)=>{var o=(s,p,i,m)=>{try{var u=t[s](p),f=(p=u.value)instanceof k,w=u.done;Promise.resolve(f?p[0]:p).then(d=>f?o(s==="return"?s:"next",p[1]?{done:d.done,value:d.value}:d,i,m):i({value:d,done:w})).catch(d=>o("throw",d,i,m))}catch(d){m(d)}},n=s=>a[s]=p=>new Promise((i,m)=>o(s,p,i,m)),a={};return t=t.apply(r,e),a[Symbol.asyncIterator]=()=>a,n("next"),n("throw"),n("return"),a};var Y=(r,e,t)=>(e=r[te("asyncIterator")])?e.call(r):(r=r[te("iterator")](),e={},t=(o,n)=>(n=r[o])&&(e[o]=a=>new Promise((s,p,i)=>(a=n.call(r,a),i=a.done,Promise.resolve(a.value).then(m=>s({value:m,done:i}),p)))),t("next"),t("return"),e);var ot={};Me(ot,{PromptLayer:()=>X});module.exports=Ue(ot);var _=process.env.URL_API_PROMPTLAYER||"https://api.promptlayer.com",ae=(r,e)=>c(void 0,null,function*(){return e.request_response[Symbol.asyncIterator]!==void 0?Ye(r,e.request_response,e):yield se(r,e)}),se=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),o=yield t.json();if(t.status!==200&&R(o,"WARNING: While logging your request, PromptLayer experienced the following error:"),o&&e.return_pl_id)return[e.request_response,o.request_id]}catch(t){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${t}`)}return e.request_response}),ie=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/library-track-metadata`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b(h({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return R(o,"WARNING: While logging metadata to your request, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${t}`),!1}return!0}),pe=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/library-track-score`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b(h({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return R(o,"WARNING: While scoring your request, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While scoring your request, PromptLayer experienced the following error: ${t}`),!1}return!0}),ce=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/library-track-prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b(h({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return R(o,"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${t}`),!1}return!0}),le=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/track-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b(h({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return R(o,"WARNING: While associating your request with a group, PromptLayer experienced the following error"),!1}catch(t){return console.warn(`WARNING: While associating your request with a group, PromptLayer experienced the following error: ${t}`),!1}return!0}),ue=r=>c(void 0,null,function*(){try{let e=yield fetch(`${_}/create-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r})}),t=yield e.json();return e.status!==200?(R(t,"WARNING: While creating a group PromptLayer had the following error"),!1):t.id}catch(e){return console.warn(`WARNING: While creating a group PromptLayer had the following error: ${e}`),!1}}),me=(r,e,t)=>c(void 0,null,function*(){try{let o=new URL(`${_}/prompt-templates/${e}`),n=yield fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify(t)}),a=yield n.json();return n.status!==200?(R(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):(a.warning&&console.warn(`WARNING: While tracking your prompt PromptLayer had the following error: ${a.warning}`),a)}catch(o){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${o}`),null}}),fe=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/rest/prompt-templates`,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify({prompt_template:h({},e),prompt_version:h({},e),release_labels:e.release_labels?e.release_labels:void 0})}),o=yield t.json();return t.status===400&&R(o,"WARNING: While publishing a prompt template PromptLayer had the following error"),o}catch(t){console.warn(`WARNING: While publishing a prompt template PromptLayer had the following error: ${t}`)}}),he=(r,e)=>c(void 0,null,function*(){var t;try{let o=new URL(`${_}/prompt-templates`);Object.entries(e||{}).forEach(([s,p])=>o.searchParams.append(s,p.toString()));let n=yield fetch(o,{headers:{"Content-Type":"application/json","X-API-KEY":r}}),a=yield n.json();return n.status!==200?(R(a,"WARNING: While fetching all prompt templates PromptLayer had the following error"),null):(t=a.items)!=null?t:[]}catch(o){return console.warn(`WARNING: While fetching all prompt templates PromptLayer had the following error: ${o}`),null}}),de=s=>c(void 0,[s],function*({workflow_name:r,input_variables:e,metadata:t={},workflow_label_name:o=null,workflow_version_number:n=null,api_key:a}){let p={input_variables:e,metadata:t,workflow_label_name:o,workflow_version_number:n};try{let i=yield fetch(`${_}/workflows/${r}/run`,{method:"POST",headers:{"X-API-KEY":a,"Content-Type":"application/json"},body:JSON.stringify(p)});if(i.status!==201){let u=yield i.json().catch(()=>({}));throw new Error(`Failed to run workflow: ${u.error||i.statusText}`)}return yield i.json()}catch(i){throw console.error(`Failed to run workflow: ${i.message}`),i}}),$=r=>{var p,i,m,u,f,w,d,A,y;let e=null,t,o={id:"",choices:[],created:Date.now(),model:"",object:"chat.completion"},n=r.at(-1);if(!n)return o;let a;for(let O of r){if(O.choices.length===0)continue;let P=O.choices[0].delta;P.content&&(e=`${e||""}${P.content||""}`),P.function_call&&(t={name:`${t?t.name:""}${P.function_call.name||""}`,arguments:`${t?t.arguments:""}${P.function_call.arguments||""}`});let g=(p=P.tool_calls)==null?void 0:p[0];if(g){a=a||[];let l=a.at(-1);if(!l||g.id){a.push({id:g.id||"",type:g.type||"function",function:{name:((i=g.function)==null?void 0:i.name)||"",arguments:((m=g.function)==null?void 0:m.arguments)||""}});continue}l.function.name=`${l.function.name}${((u=g.function)==null?void 0:u.name)||""}`,l.function.arguments=`${l.function.arguments}${((f=g.function)==null?void 0:f.arguments)||""}`}}let s=r[0].choices.at(0);return o.choices.push({finish_reason:(w=s==null?void 0:s.finish_reason)!=null?w:"stop",index:(d=s==null?void 0:s.index)!=null?d:0,logprobs:(A=s==null?void 0:s.logprobs)!=null?A:null,message:{role:"assistant",content:e,function_call:t||void 0,tool_calls:a||void 0,refusal:(y=s==null?void 0:s.delta.refusal)!=null?y:null}}),o.id=n.id,o.model=n.model,o.created=n.created,o.system_fingerprint=n.system_fingerprint,o.usage=n.usage,o},D=r=>{let e={id:"",model:"",content:[],role:"assistant",type:"message",stop_reason:"stop_sequence",stop_sequence:null,usage:{input_tokens:0,output_tokens:0}};if(!r.at(-1))return e;let o="";for(let n of r)switch(n.type){case"message_start":{e=h({},n.message);break}case"content_block_delta":n.delta.type==="text_delta"&&(o=`${o}${n.delta.text}`);case"message_delta":"usage"in n&&(e.usage.output_tokens=n.usage.output_tokens),"stop_reason"in n.delta&&(e.stop_reason=n.delta.stop_reason);default:break}return e.content.push({type:"text",text:o}),e},Je=(r,e="openai.chat.completions.create")=>{if("completion"in r[0])return r.reduce((t,o)=>b(h({},o),{completion:`${t.completion}${o.completion}`}),{});if(e==="anthropic.messages.create")return D(r);if("text"in r[0].choices[0]){let t="";for(let n of r)t=`${t}${n.choices[0].text}`;let o=structuredClone(r.at(-1));return o.choices[0].text=t,o}if("delta"in r[0].choices[0]){let t=$(r);return t.choices[0]=h(h({},t.choices[0]),t.choices[0].message),t}return""};function Ye(r,e,t){return J(this,null,function*(){let o=[];try{for(var s=Y(e),p,i,m;p=!(i=yield new k(s.next())).done;p=!1){let u=i.value;yield t.return_pl_id?[u,null]:u,o.push(u)}}catch(i){m=[i]}finally{try{p&&(i=s.return)&&(yield new k(i.call(s)))}finally{if(m)throw m[0]}}let n=Je(o,t.function_name),a=yield new k(se(r,b(h({},t),{request_response:n,request_end_time:new Date().toISOString()})));if(a&&t.return_pl_id){let u=a[1];yield[o.at(-1),u]}})}var R=(r,e)=>{try{console.warn(`${e}: ${r.message}`)}catch(t){console.warn(`${e}: ${r}`)}},ye=r=>c(void 0,null,function*(){try{let e=yield fetch(`${_}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return e.status!==200&&R(e,"WARNING: While logging your request, PromptLayer experienced the following error:"),e.json()}catch(e){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${e}`)}return{}}),F=r=>{let e={id:"",choices:[{finish_reason:"stop",index:0,text:"",logprobs:null}],created:Date.now(),model:"",object:"text_completion"},t=r.at(-1);if(!t)return e;let o="";for(let n of r)n.choices.length>0&&n.choices[0].text&&(o=`${o}${n.choices[0].text}`);return e.choices[0].text=o,e.id=t.id,e.created=t.created,e.model=t.model,e.system_fingerprint=t.system_fingerprint,e.usage=t.usage,e},ge=r=>{let e={completion:"",id:"",model:"",stop_reason:"",type:"completion"},t=r.at(-1);if(!t)return e;let o="";for(let n of r)o=`${o}${n.completion}`;return e.completion=o,e.id=t.id,e.model=t.model,e.stop_reason=t.stop_reason,e};function _e(r,e,t){return J(this,null,function*(){let o={request_id:null,raw_response:null,prompt_blueprint:null},n=[];try{for(var p=Y(r),i,m,u;i=!(m=yield new k(p.next())).done;i=!1){let f=m.value;n.push(f),o.raw_response=f,yield o}}catch(m){u=[m]}finally{try{i&&(m=p.return)&&(yield new k(m.call(p)))}finally{if(u)throw u[0]}}let a=t(n),s=yield new k(e({request_response:a}));o.request_id=s.request_id,o.prompt_blueprint=s.prompt_blueprint,yield o})}var De=(r,e)=>c(void 0,null,function*(){return r.chat.completions.create(e)}),Fe=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),we={chat:De,completion:Fe},Pe=(r,e)=>c(void 0,null,function*(){let t=require("openai").default,o=new t({baseURL:e.baseURL}),n=we[r.prompt_template.type];return n(o,e)}),Re=(r,e)=>c(void 0,null,function*(){let t=require("openai").AzureOpenAI,o=new t({baseURL:e.baseURL}),n=we[r.prompt_template.type];return n(o,e)}),ze=(r,e)=>c(void 0,null,function*(){return r.messages.create(e)}),Be=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),Xe={chat:ze,completion:Be},Te=(r,e)=>c(void 0,null,function*(){let t=require("@anthropic-ai/sdk").default,o=new t({baseURL:e.baseURL}),n=Xe[r.prompt_template.type];return n(o,e)}),Se=(r,e)=>c(void 0,null,function*(){try{let t=yield fetch(`${_}/log-request`,{method:"POST",headers:{"X-API-KEY":r,"Content-Type":"application/json"},body:JSON.stringify(e)});return t.status!==201?(R(t,"WARNING: While logging your request PromptLayer had the following error"),null):t.json()}catch(t){return console.warn(`WARNING: While tracking your prompt PromptLayer had the following error: ${t}`),null}});var W=class{constructor(e){this.create=()=>ue(this.apiKey);this.apiKey=e}};var ke=U(require("@opentelemetry/api")),Ae=require("@opentelemetry/sdk-trace-base"),Oe=require("@opentelemetry/sdk-trace-node");var T=require("@opentelemetry/api"),E=require("@opentelemetry/core");var z=class{constructor(e,t){this.apiKey=t||process.env.PROMPTLAYER_API_KEY,this.enableTracing=e,this.url=`${_}/spans-bulk`}attributesToObject(e){return e?Object.fromEntries(Object.entries(e)):{}}spanKindToString(e){return{[T.SpanKind.INTERNAL]:"SpanKind.INTERNAL",[T.SpanKind.SERVER]:"SpanKind.SERVER",[T.SpanKind.CLIENT]:"SpanKind.CLIENT",[T.SpanKind.PRODUCER]:"SpanKind.PRODUCER",[T.SpanKind.CONSUMER]:"SpanKind.CONSUMER"}[e]||"SpanKind.INTERNAL"}statusCodeToString(e){return{[T.SpanStatusCode.ERROR]:"StatusCode.ERROR",[T.SpanStatusCode.OK]:"StatusCode.OK",[T.SpanStatusCode.UNSET]:"StatusCode.UNSET"}[e]||"StatusCode.UNSET"}toNanoseconds(e){return(BigInt(e[0])*BigInt(1e9)+BigInt(e[1])).toString()}export(e){if(!this.enableTracing)return Promise.resolve(E.ExportResultCode.SUCCESS);let t=e.map(o=>{var n;return{name:o.name,context:{trace_id:o.spanContext().traceId,span_id:o.spanContext().spanId,trace_state:((n=o.spanContext().traceState)==null?void 0:n.serialize())||""},kind:this.spanKindToString(o.kind),parent_id:o.parentSpanId||null,start_time:this.toNanoseconds(o.startTime),end_time:this.toNanoseconds(o.endTime),status:{status_code:this.statusCodeToString(o.status.code),description:o.status.message},attributes:this.attributesToObject(o.attributes),events:o.events.map(a=>({name:a.name,timestamp:this.toNanoseconds(a.time),attributes:this.attributesToObject(a.attributes)})),links:o.links.map(a=>({context:a.context,attributes:this.attributesToObject(a.attributes)})),resource:{attributes:b(h({},o.resource.attributes),{"service.name":"prompt-layer-js"}),schema_url:""}}});return fetch(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey||""},body:JSON.stringify({spans:t})}).then(o=>o.ok?E.ExportResultCode.SUCCESS:(console.error(`Error exporting spans
2
+ HTTP error! status: ${o.status}`),E.ExportResultCode.FAILED)).catch(o=>(console.error("Error exporting spans:",o),E.ExportResultCode.FAILED))}shutdown(){return Promise.resolve()}},be=z;var C=(r="promptlayer-tracer")=>ke.trace.getTracer(r),Ne=(r,e)=>{let t=new Oe.NodeTracerProvider,o=new be(r,e),n=new Ae.SimpleSpanProcessor(o);t.addSpanProcessor(n),t.register()};var He=C(),B=(r,e,t="",o="openai")=>{let n={construct:(a,s)=>{let p=Reflect.construct(a,s);return Object.defineProperties(p,{function_name:{value:t,writable:!0},provider:{value:o}}),new Proxy(p,n)},get:(a,s,p)=>{let i=a[s],m=`${Reflect.get(a,"function_name")}.${s.toString()}`;return typeof i=="object"?(Object.defineProperties(i,{function_name:{value:m,writable:!0},provider:{value:o}}),new Proxy(i,n)):typeof i=="function"?(...u)=>{var y,O,P,g;let f=new Date().toISOString(),w=Reflect.get(a,"provider"),d=(y=u[0])==null?void 0:y.return_pl_id,A=(O=u[0])==null?void 0:O.pl_tags;return(P=u[0])==null||delete P.return_pl_id,(g=u[0])==null||delete g.pl_tags,He.startActiveSpan(`${w}.${m}`,l=>c(void 0,null,function*(){try{l.setAttribute("function_input",JSON.stringify(u));let S=Reflect.apply(i,a,u),N=l.spanContext().spanId;return S instanceof Promise?new Promise((L,K)=>{S.then(I=>c(void 0,null,function*(){let x=yield ae(r,{api_key:r,provider_type:w,function_name:m,request_start_time:f,request_end_time:new Date().toISOString(),request_response:I,kwargs:u[0],return_pl_id:d,tags:A,span_id:N});l.setAttribute("function_output",JSON.stringify(x)),l.setAttribute("response_status","success"),l.end(),L(x)})).catch(I=>{l.recordException(I),l.setAttribute("response_status","error"),l.end(),K(I)})}):(l.setAttribute("function_output",JSON.stringify(S)),l.setAttribute("response_status","success"),l.end(),S)}catch(S){throw l.recordException(S),l.setAttribute("response_status","error"),l.end(),S}}))}:Reflect.get(a,s,p)}};return new Proxy(e,n)};var v=U(require("@opentelemetry/api"));var Ce=(r,e,t)=>function(...o){let n=C(),a=s=>{try{t&&Object.entries(t).forEach(([i,m])=>{s.setAttribute(i,m)}),s.setAttribute("function_input",JSON.stringify(o));let p=e(...o);return p instanceof Promise?p.then(i=>(s.setAttribute("function_output",JSON.stringify(i)),s.setStatus({code:v.SpanStatusCode.OK}),i)).catch(i=>{throw Ie(s,i,o),i}).finally(()=>s.end()):(s.setAttribute("function_output",JSON.stringify(p)),s.setStatus({code:v.SpanStatusCode.OK}),s.end(),p)}catch(p){throw Ie(s,p,o),p}};return n.startActiveSpan(r,a)},Ie=(r,e,t)=>{r.setAttribute("function_input",JSON.stringify(t)),r.setStatus({code:v.SpanStatusCode.ERROR,message:e instanceof Error?e.message:"Unknown error"}),r.end()};var G=class{constructor(e){this.get=(e,t)=>me(this.apiKey,e,t);this.publish=e=>fe(this.apiKey,e);this.all=e=>he(this.apiKey,e);this.apiKey=e}};var Ve=(r,e)=>{if(!(e.metadata instanceof Object))throw new Error("Please provide a dictionary of metadata.");for(let[t,o]of Object.entries(e.metadata))if(typeof t!="string"||typeof o!="string")throw new Error("Please provide a dictionary of metadata with key value pair of strings.");return ie(r,e)},Qe=(r,e)=>{if(typeof e.score!="number")throw new Error("Score must be a number");if(e.score<0||e.score>100)throw new Error("Score must be a number between 0 and 100.");return pe(r,e)},Ze=(r,e)=>{if(!(e.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return ce(r,e)},et=(r,e)=>le(r,e),j=class{constructor(e){this.group=e=>et(this.apiKey,e);this.metadata=e=>Ve(this.apiKey,e);this.prompt=e=>Ze(this.apiKey,e);this.score=e=>Qe(this.apiKey,e);this.apiKey=e}};var qe=U(require("@opentelemetry/api"));var tt={openai:{chat:{function_name:"openai.chat.completions.create",stream_function:$},completion:{function_name:"openai.completions.create",stream_function:F}},anthropic:{chat:{function_name:"anthropic.messages.create",stream_function:D},completion:{function_name:"anthropic.completions.create",stream_function:ge}},"openai.azure":{chat:{function_name:"openai.AzureOpenAI.chat.completions.create",stream_function:$},completion:{function_name:"openai.AzureOpenAI.completions.create",stream_function:F}}},rt={openai:Pe,anthropic:Te,"openai.azure":Re},X=class{constructor({apiKey:e=process.env.PROMPTLAYER_API_KEY,enableTracing:t=!1}={}){if(e===void 0)throw new Error("PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.");this.apiKey=e,this.enableTracing=t,this.templates=new G(e),this.group=new W(e),this.track=new j(e),this.wrapWithSpan=Ce,t&&Ne(t,e)}get Anthropic(){try{let e=require("@anthropic-ai/sdk").default;return B(this.apiKey,e,"anthropic","anthropic")}catch(e){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}get OpenAI(){try{let e=require("openai").default;return B(this.apiKey,e,"openai","openai")}catch(e){console.error("To use the OpenAI module, you must install the @openai/api package.")}}run(m){return c(this,arguments,function*({promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i=!1}){return C().startActiveSpan("PromptLayer Run",f=>c(this,null,function*(){try{let w={promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i};f.setAttribute("function_input",JSON.stringify(w));let d=n,A={label:o,version:t,metadata_filters:s};n&&(A.input_variables=n);let y=yield this.templates.get(e,A);if(!y)throw new Error("Prompt not found");let O=y.prompt_template;if(!y.llm_kwargs)throw new Error(`Prompt '${e}' does not have any LLM kwargs associated with it.`);let P=y.metadata;if(!P)throw new Error(`Prompt '${e}' does not have any metadata associated with it.`);let g=P.model;if(!g)throw new Error(`Prompt '${e}' does not have a model parameters associated with it.`);let l=g.provider,S=new Date().toISOString(),N=y.llm_kwargs,L=tt[l][O.type],K=L.function_name,I=L.stream_function,x=rt[l],H=y.provider_base_url;H&&(N.baseURL=H.url),N.stream=i,i&&["openai","openai.azure"].includes(l)&&(N.stream_options={include_usage:!0});let M=yield x(y,N),V=Ee=>{let Le=new Date().toISOString();return ye(h({function_name:K,provider_type:l,args:[],kwargs:N,tags:a,request_start_time:S,request_end_time:Le,api_key:this.apiKey,metadata:s,prompt_id:y.id,prompt_version:y.version,prompt_input_variables:d,group_id:p,return_prompt_blueprint:!0,span_id:f.spanContext().spanId},Ee))};if(i)return _e(M,V,I);let Q=yield V({request_response:M}),Z={request_id:Q.request_id,raw_response:M,prompt_blueprint:Q.prompt_blueprint};return f.setAttribute("function_output",JSON.stringify(Z)),Z}catch(w){throw f.setStatus({code:qe.SpanStatusCode.ERROR,message:w instanceof Error?w.message:"Unknown error"}),w}finally{f.end()}}))})}runWorkflow(s){return c(this,arguments,function*({workflowName:e,inputVariables:t={},metadata:o={},workflowLabelName:n=null,workflowVersionNumber:a=null}){try{return yield de({workflow_name:e,input_variables:t,metadata:o,workflow_label_name:n,workflow_version_number:a,api_key:this.apiKey})}catch(p){throw p instanceof Error?(console.error("Error running workflow:",p.message),new Error(`Error running workflow: ${p.message}`)):(console.error("Unknown error running workflow:",p),new Error("Unknown error running workflow"))}})}logRequest(e){return c(this,null,function*(){return Se(this.apiKey,e)})}};0&&(module.exports={PromptLayer});
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/groups.ts","../src/tracing.ts","../src/span-exporter.ts","../src/promptlayer.ts","../src/span-wrapper.ts","../src/templates.ts","../src/track.ts"],"sourcesContent":["import { GroupManager } from \"@/groups\";\nimport { promptLayerBase } from \"@/promptlayer\";\nimport { wrapWithSpan } from \"@/span-wrapper\";\nimport { TemplateManager } from \"@/templates\";\nimport { getTracer, setupTracing } from \"@/tracing\";\nimport { TrackManager } from \"@/track\";\nimport { GetPromptTemplateParams, LogRequest, RunRequest } from \"@/types\";\nimport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n streamResponse,\n trackRequest,\n utilLogRequest,\n} from \"@/utils\";\nimport * as opentelemetry from \"@opentelemetry/api\";\n\nconst MAP_PROVIDER_TO_FUNCTION_NAME = {\n openai: {\n chat: {\n function_name: \"openai.chat.completions.create\",\n stream_function: openaiStreamChat,\n },\n completion: {\n function_name: \"openai.completions.create\",\n stream_function: openaiStreamCompletion,\n },\n },\n anthropic: {\n chat: {\n function_name: \"anthropic.messages.create\",\n stream_function: anthropicStreamMessage,\n },\n completion: {\n function_name: \"anthropic.completions.create\",\n stream_function: anthropicStreamCompletion,\n },\n },\n};\n\nconst MAP_PROVIDER_TO_FUNCTION: Record<string, any> = {\n openai: openaiRequest,\n anthropic: anthropicRequest,\n};\n\nexport interface ClientOptions {\n apiKey?: string;\n enableTracing?: boolean;\n workspaceId?: number;\n}\n\nexport class PromptLayer {\n apiKey: string;\n templates: TemplateManager;\n group: GroupManager;\n track: TrackManager;\n enableTracing: boolean;\n wrapWithSpan: typeof wrapWithSpan;\n\n constructor({\n apiKey = process.env.PROMPTLAYER_API_KEY,\n enableTracing = false,\n }: ClientOptions = {}) {\n if (apiKey === undefined) {\n throw new Error(\n \"PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.\"\n );\n }\n\n this.apiKey = apiKey;\n this.enableTracing = enableTracing;\n this.templates = new TemplateManager(apiKey);\n this.group = new GroupManager(apiKey);\n this.track = new TrackManager(apiKey);\n this.wrapWithSpan = wrapWithSpan;\n\n if (enableTracing) {\n setupTracing(enableTracing, apiKey);\n }\n }\n\n get Anthropic() {\n try {\n const module = require(\"@anthropic-ai/sdk\").default;\n return promptLayerBase(this.apiKey, module, \"anthropic\", \"anthropic\");\n } catch (e) {\n console.error(\n \"To use the Anthropic module, you must install the @anthropic-ai/sdk package.\"\n );\n }\n }\n\n get OpenAI() {\n try {\n const module = require(\"openai\").default;\n return promptLayerBase(this.apiKey, module, \"openai\", \"openai\");\n } catch (e) {\n console.error(\n \"To use the OpenAI module, you must install the @openai/api package.\"\n );\n }\n }\n\n async run({\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream = false,\n }: RunRequest) {\n const tracer = getTracer();\n\n return tracer.startActiveSpan(\"PromptLayer Run\", async (span) => {\n try {\n const functionInput = {\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream,\n };\n span.setAttribute(\"function_input\", JSON.stringify(functionInput));\n\n const prompt_input_variables = inputVariables;\n const templateGetParams: GetPromptTemplateParams = {\n label: promptReleaseLabel,\n version: promptVersion,\n metadata_filters: metadata,\n };\n if (inputVariables) templateGetParams.input_variables = inputVariables;\n\n const promptBlueprint = await this.templates.get(\n promptName,\n templateGetParams\n );\n\n if (!promptBlueprint) throw new Error(\"Prompt not found\");\n\n const promptTemplate = promptBlueprint.prompt_template;\n if (!promptBlueprint.llm_kwargs) {\n throw new Error(\n `Prompt '${promptName}' does not have any LLM kwargs associated with it.`\n );\n }\n\n const promptBlueprintMetadata = promptBlueprint.metadata;\n if (!promptBlueprintMetadata) {\n throw new Error(\n `Prompt '${promptName}' does not have any metadata associated with it.`\n );\n }\n\n const promptBlueprintModel = promptBlueprintMetadata.model;\n if (!promptBlueprintModel) {\n throw new Error(\n `Prompt '${promptName}' does not have a model parameters associated with it.`\n );\n }\n\n const provider_type = promptBlueprintModel.provider;\n\n const request_start_time = new Date().toISOString();\n const kwargs = promptBlueprint.llm_kwargs;\n const config =\n MAP_PROVIDER_TO_FUNCTION_NAME[\n provider_type as keyof typeof MAP_PROVIDER_TO_FUNCTION_NAME\n ][promptTemplate.type];\n const function_name = config.function_name;\n\n const stream_function = config.stream_function;\n const request_function = MAP_PROVIDER_TO_FUNCTION[provider_type];\n const provider_base_url = promptBlueprint.provider_base_url;\n if (provider_base_url) {\n kwargs[\"baseURL\"] = provider_base_url.url;\n }\n kwargs[\"stream\"] = stream;\n if (stream && provider_type === \"openai\") {\n kwargs[\"stream_options\"] = { include_usage: true };\n }\n\n const response = await request_function(promptBlueprint, kwargs);\n\n const _trackRequest = (body: object) => {\n const request_end_time = new Date().toISOString();\n return trackRequest({\n function_name,\n provider_type,\n args: [],\n kwargs,\n tags,\n request_start_time,\n request_end_time,\n api_key: this.apiKey,\n metadata,\n prompt_id: promptBlueprint.id,\n prompt_version: promptBlueprint.version,\n prompt_input_variables,\n group_id: groupId,\n return_prompt_blueprint: true,\n span_id: span.spanContext().spanId,\n ...body,\n });\n };\n\n if (stream)\n return streamResponse(response, _trackRequest, stream_function);\n const requestLog = await _trackRequest({ request_response: response });\n\n const functionOutput = {\n request_id: requestLog.request_id,\n raw_response: response,\n prompt_blueprint: requestLog.prompt_blueprint,\n };\n span.setAttribute(\"function_output\", JSON.stringify(functionOutput));\n\n return functionOutput;\n } catch (error) {\n span.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n throw error;\n } finally {\n span.end();\n }\n });\n }\n\n async logRequest(body: LogRequest) {\n return utilLogRequest(this.apiKey, body);\n }\n}\n","import {\n GetPromptTemplateParams,\n GetPromptTemplateResponse,\n ListPromptTemplatesResponse,\n LogRequest,\n Pagination,\n PublishPromptTemplate,\n PublishPromptTemplateResponse,\n RequestLog,\n TrackGroup,\n TrackMetadata,\n TrackPrompt,\n TrackRequest,\n TrackScore,\n} from \"@/types\";\nimport type TypeAnthropic from \"@anthropic-ai/sdk\";\nimport {\n Completion as AnthropicCompletion,\n Message,\n MessageStreamEvent,\n} from \"@anthropic-ai/sdk/resources\";\nimport type TypeOpenAI from \"openai\";\nimport {\n ChatCompletion,\n ChatCompletionChunk,\n Completion,\n} from \"openai/resources\";\n\nexport const URL_API_PROMPTLAYER =\n process.env.URL_API_PROMPTLAYER || \"https://api.promptlayer.com\";\n\nconst promptlayerApiHandler = async <Item>(\n apiKey: string,\n body: TrackRequest & {\n request_response: AsyncIterable<Item> | any;\n }\n) => {\n const isGenerator = body.request_response[Symbol.asyncIterator] !== undefined;\n if (isGenerator) {\n return proxyGenerator(apiKey, body.request_response, body);\n }\n return await promptLayerApiRequest(apiKey, body);\n};\n\nconst promptLayerApiRequest = async (apiKey: string, body: TrackRequest) => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-request`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While logging your request, PromptLayer experienced the following error:\"\n );\n }\n if (data && body.return_pl_id) {\n return [body.request_response, data.request_id];\n }\n } catch (e) {\n console.warn(\n `WARNING: While logging your request PromptLayer had the following error: ${e}`\n );\n }\n return body.request_response;\n};\n\nconst promptLayerTrackMetadata = async (\n apiKey: string,\n body: TrackMetadata\n): Promise<boolean> => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/library-track-metadata`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n }\n );\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While logging metadata to your request, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackScore = async (\n apiKey: string,\n body: TrackScore\n): Promise<boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/library-track-score`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While scoring your request, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While scoring your request, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackPrompt = async (\n apiKey: string,\n body: TrackPrompt\n): Promise<boolean> => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/library-track-prompt`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n }\n );\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackGroup = async (\n apiKey: string,\n body: TrackGroup\n): Promise<boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-group`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While associating your request with a group, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While associating your request with a group, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerCreateGroup = async (\n apiKey: string\n): Promise<number | boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/create-group`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While creating a group PromptLayer had the following error\"\n );\n return false;\n }\n return data.id;\n } catch (e) {\n console.warn(\n `WARNING: While creating a group PromptLayer had the following error: ${e}`\n );\n return false;\n }\n};\n\nconst getPromptTemplate = async (\n apiKey: string,\n promptName: string,\n params?: Partial<GetPromptTemplateParams>\n) => {\n try {\n const url = new URL(\n `${URL_API_PROMPTLAYER}/prompt-templates/${promptName}`\n );\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n body: JSON.stringify(params),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While fetching a prompt template PromptLayer had the following error\"\n );\n return null;\n }\n if(data.warning){\n console.warn(\n `WARNING: While tracking your prompt PromptLayer had the following error: ${data.warning}`\n );\n }\n return data as Promise<GetPromptTemplateResponse>;\n } catch (e) {\n console.warn(\n `WARNING: While fetching a prompt template PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nconst publishPromptTemplate = async (\n apiKey: string,\n body: PublishPromptTemplate\n) => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/rest/prompt-templates`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n body: JSON.stringify({\n prompt_template: { ...body },\n prompt_version: { ...body },\n release_labels: body.release_labels ? body.release_labels : undefined,\n }),\n }\n );\n const data = await response.json();\n if (response.status === 400) {\n warnOnBadResponse(\n data,\n \"WARNING: While publishing a prompt template PromptLayer had the following error\"\n );\n }\n return data as Promise<PublishPromptTemplateResponse>;\n } catch (e) {\n console.warn(\n `WARNING: While publishing a prompt template PromptLayer had the following error: ${e}`\n );\n }\n};\n\nconst getAllPromptTemplates = async (\n apiKey: string,\n params?: Partial<Pagination>\n) => {\n try {\n const url = new URL(`${URL_API_PROMPTLAYER}/prompt-templates`);\n Object.entries(params || {}).forEach(([key, value]) =>\n url.searchParams.append(key, value.toString())\n );\n const response = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While fetching all prompt templates PromptLayer had the following error\"\n );\n return null;\n }\n return (data.items ?? []) as Promise<Array<ListPromptTemplatesResponse>>;\n } catch (e) {\n console.warn(\n `WARNING: While fetching all prompt templates PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nconst openaiStreamChat = (results: ChatCompletionChunk[]): ChatCompletion => {\n let content: ChatCompletion.Choice[\"message\"][\"content\"] = null;\n let functionCall: ChatCompletion.Choice[\"message\"][\"function_call\"] =\n undefined;\n const response: ChatCompletion = {\n id: \"\",\n choices: [],\n created: Date.now(),\n model: \"\",\n object: \"chat.completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let toolCalls: ChatCompletion.Choice[\"message\"][\"tool_calls\"] = undefined;\n for (const result of results) {\n if (result.choices.length === 0) continue;\n const delta = result.choices[0].delta;\n\n if (delta.content) {\n content = `${content || \"\"}${delta.content || \"\"}`;\n }\n if (delta.function_call) {\n functionCall = {\n name: `${functionCall ? functionCall.name : \"\"}${\n delta.function_call.name || \"\"\n }`,\n arguments: `${functionCall ? functionCall.arguments : \"\"}${\n delta.function_call.arguments || \"\"\n }`,\n };\n }\n const toolCall = delta.tool_calls?.[0];\n if (toolCall) {\n toolCalls = toolCalls || [];\n const lastToolCall = toolCalls.at(-1);\n if (!lastToolCall || toolCall.id) {\n toolCalls.push({\n id: toolCall.id || \"\",\n type: toolCall.type || \"function\",\n function: {\n name: toolCall.function?.name || \"\",\n arguments: toolCall.function?.arguments || \"\",\n },\n });\n continue;\n }\n lastToolCall.function.name = `${lastToolCall.function.name}${\n toolCall.function?.name || \"\"\n }`;\n lastToolCall.function.arguments = `${lastToolCall.function.arguments}${\n toolCall.function?.arguments || \"\"\n }`;\n }\n }\n response.choices.push({\n finish_reason: results[0].choices[0].finish_reason || \"stop\",\n index: results[0].choices[0].index || 0,\n logprobs: results[0].choices[0].logprobs || null,\n message: {\n role: \"assistant\",\n content,\n function_call: functionCall ? functionCall : undefined,\n tool_calls: toolCalls ? toolCalls : undefined,\n },\n });\n response.id = lastResult.id;\n response.model = lastResult.model;\n response.created = lastResult.created;\n response.system_fingerprint = lastResult.system_fingerprint;\n response.usage = lastResult.usage;\n return response;\n};\n\nconst anthropicStreamMessage = (results: MessageStreamEvent[]): Message => {\n let response: Message = {\n id: \"\",\n model: \"\",\n content: [],\n role: \"assistant\",\n type: \"message\",\n stop_reason: \"stop_sequence\",\n stop_sequence: null,\n usage: {\n input_tokens: 0,\n output_tokens: 0,\n },\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let content = \"\";\n for (const result of results) {\n switch (result.type) {\n case \"message_start\": {\n response = {\n ...result.message,\n };\n break;\n }\n case \"content_block_delta\": {\n if (result.delta.type === \"text_delta\")\n content = `${content}${result.delta.text}`;\n }\n case \"message_delta\": {\n if (\"usage\" in result)\n response.usage.output_tokens = result.usage.output_tokens;\n if (\"stop_reason\" in result.delta)\n response.stop_reason = result.delta.stop_reason;\n }\n default: {\n break;\n }\n }\n }\n response.content.push({\n type: \"text\",\n text: content,\n });\n return response;\n};\n\nconst cleaned_result = (\n results: any[],\n function_name = \"openai.chat.completions.create\"\n) => {\n if (\"completion\" in results[0]) {\n return results.reduce(\n (prev, current) => ({\n ...current,\n completion: `${prev.completion}${current.completion}`,\n }),\n {}\n );\n }\n\n if (function_name === \"anthropic.messages.create\")\n return anthropicStreamMessage(results);\n\n if (\"text\" in results[0].choices[0]) {\n let response = \"\";\n for (const result of results) {\n response = `${response}${result.choices[0].text}`;\n }\n const final_result = structuredClone(results.at(-1));\n final_result.choices[0].text = response;\n return final_result;\n }\n\n if (\"delta\" in results[0].choices[0]) {\n const response = openaiStreamChat(results);\n response.choices[0] = {\n ...response.choices[0],\n ...response.choices[0].message,\n };\n return response;\n }\n\n return \"\";\n};\n\nasync function* proxyGenerator<Item>(\n apiKey: string,\n generator: AsyncIterable<Item>,\n body: TrackRequest\n) {\n const results = [];\n for await (const value of generator) {\n yield body.return_pl_id ? [value, null] : value;\n results.push(value);\n }\n const request_response = cleaned_result(results, body.function_name);\n const response = await promptLayerApiRequest(apiKey, {\n ...body,\n request_response,\n request_end_time: new Date().toISOString(),\n });\n if (response) {\n if (body.return_pl_id) {\n const request_id = (response as any)[1];\n const lastResult = results.at(-1);\n yield [lastResult, request_id];\n }\n }\n}\n\nconst warnOnBadResponse = (request_response: any, main_message: string) => {\n try {\n console.warn(`${main_message}: ${request_response.message}`);\n } catch (e) {\n console.warn(`${main_message}: ${request_response}`);\n }\n};\n\nconst trackRequest = async (body: TrackRequest) => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-request`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (response.status !== 200)\n warnOnBadResponse(\n response,\n \"WARNING: While logging your request, PromptLayer experienced the following error:\"\n );\n return response.json();\n } catch (e) {\n console.warn(\n `WARNING: While logging your request PromptLayer had the following error: ${e}`\n );\n }\n return {};\n};\n\nconst openaiStreamCompletion = (results: Completion[]) => {\n const response: Completion = {\n id: \"\",\n choices: [\n {\n finish_reason: \"stop\",\n index: 0,\n text: \"\",\n logprobs: null,\n },\n ],\n created: Date.now(),\n model: \"\",\n object: \"text_completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let text = \"\";\n for (const result of results) {\n if (result.choices.length > 0 && result.choices[0].text) {\n text = `${text}${result.choices[0].text}`;\n }\n }\n response.choices[0].text = text;\n response.id = lastResult.id;\n response.created = lastResult.created;\n response.model = lastResult.model;\n response.system_fingerprint = lastResult.system_fingerprint;\n response.usage = lastResult.usage;\n return response;\n};\n\nconst anthropicStreamCompletion = (results: AnthropicCompletion[]) => {\n const response: AnthropicCompletion = {\n completion: \"\",\n id: \"\",\n model: \"\",\n stop_reason: \"\",\n type: \"completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let completion = \"\";\n for (const result of results) {\n completion = `${completion}${result.completion}`;\n }\n response.completion = completion;\n response.id = lastResult.id;\n response.model = lastResult.model;\n response.stop_reason = lastResult.stop_reason;\n return response;\n};\n\nasync function* streamResponse<Item>(\n generator: AsyncIterable<Item>,\n afterStream: (body: object) => any,\n mapResults: any\n) {\n const data: {\n request_id: number | null;\n raw_response: any;\n prompt_blueprint: any;\n } = {\n request_id: null,\n raw_response: null,\n prompt_blueprint: null,\n };\n const results = [];\n for await (const result of generator) {\n results.push(result);\n data.raw_response = result;\n yield data;\n }\n const request_response = mapResults(results);\n const response = await afterStream({ request_response });\n data.request_id = response.request_id;\n data.prompt_blueprint = response.prompt_blueprint;\n yield data;\n}\n\nconst openaiChatRequest = async (client: TypeOpenAI, kwargs: any) => {\n return client.chat.completions.create(kwargs);\n};\n\nconst openaiCompletionsRequest = async (client: TypeOpenAI, kwargs: any) => {\n return client.completions.create(kwargs);\n};\n\nconst MAP_TYPE_TO_OPENAI_FUNCTION = {\n chat: openaiChatRequest,\n completion: openaiCompletionsRequest,\n};\n\nconst openaiRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const OpenAI = require(\"openai\").default;\n const client = new OpenAI({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_OPENAI_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst anthropicChatRequest = async (client: TypeAnthropic, kwargs: any) => {\n return client.messages.create(kwargs);\n};\n\nconst anthropicCompletionsRequest = async (\n client: TypeAnthropic,\n kwargs: any\n) => {\n return client.completions.create(kwargs);\n};\n\nconst MAP_TYPE_TO_ANTHROPIC_FUNCTION = {\n chat: anthropicChatRequest,\n completion: anthropicCompletionsRequest,\n};\n\nconst anthropicRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const Anthropic = require(\"@anthropic-ai/sdk\").default;\n const client = new Anthropic({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_ANTHROPIC_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst utilLogRequest = async (\n apiKey: string,\n body: LogRequest\n): Promise<RequestLog | null> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/log-request`, {\n method: \"POST\",\n headers: {\n \"X-API-KEY\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (response.status !== 201) {\n warnOnBadResponse(\n response,\n \"WARNING: While logging your request PromptLayer had the following error\"\n );\n return null;\n }\n return response.json();\n } catch (e) {\n console.warn(\n `WARNING: While tracking your prompt PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nexport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n getAllPromptTemplates,\n getPromptTemplate,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n promptlayerApiHandler,\n promptLayerApiRequest,\n promptLayerCreateGroup,\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n publishPromptTemplate,\n streamResponse,\n trackRequest,\n utilLogRequest,\n};\n","import { promptLayerCreateGroup } from \"@/utils\";\n\nexport class GroupManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n create = () => promptLayerCreateGroup(this.apiKey);\n}\n","import * as opentelemetry from '@opentelemetry/api';\nimport {SimpleSpanProcessor} from '@opentelemetry/sdk-trace-base';\nimport {NodeTracerProvider} from '@opentelemetry/sdk-trace-node';\nimport PromptLayerSpanExporter from '@/span-exporter';\n\nexport const getTracer = (name: string = 'promptlayer-tracer') => {\n return opentelemetry.trace.getTracer(name);\n}\n\nexport const setupTracing = (enableTracing: boolean, apiKey?: string) => {\n const provider = new NodeTracerProvider();\n const exporter = new PromptLayerSpanExporter(enableTracing, apiKey);\n const processor = new SimpleSpanProcessor(exporter);\n provider.addSpanProcessor(processor);\n provider.register();\n}\n","import {Attributes, SpanKind, SpanStatusCode} from '@opentelemetry/api';\nimport {ReadableSpan, SpanExporter} from '@opentelemetry/sdk-trace-base';\nimport {ExportResultCode} from '@opentelemetry/core';\nimport {URL_API_PROMPTLAYER} from '@/utils';\n\nclass PromptLayerSpanExporter implements SpanExporter {\n private apiKey: string | undefined;\n private enableTracing: boolean;\n private url: string;\n\n constructor(enableTracing: boolean, apiKey?: string) {\n this.apiKey = apiKey || process.env.PROMPTLAYER_API_KEY;\n this.enableTracing = enableTracing;\n this.url = `${URL_API_PROMPTLAYER}/spans-bulk`;\n }\n\n private attributesToObject(attributes: Attributes | undefined): Record<string, any> {\n if (!attributes) return {};\n return Object.fromEntries(Object.entries(attributes));\n }\n\n private spanKindToString(kind: SpanKind): string {\n const kindMap: Record<SpanKind, string> = {\n [SpanKind.INTERNAL]: 'SpanKind.INTERNAL',\n [SpanKind.SERVER]: 'SpanKind.SERVER',\n [SpanKind.CLIENT]: 'SpanKind.CLIENT',\n [SpanKind.PRODUCER]: 'SpanKind.PRODUCER',\n [SpanKind.CONSUMER]: 'SpanKind.CONSUMER',\n };\n return kindMap[kind] || 'SpanKind.INTERNAL';\n }\n\n private statusCodeToString(code: SpanStatusCode): string {\n const statusMap: Record<SpanStatusCode, string> = {\n [SpanStatusCode.ERROR]: 'StatusCode.ERROR',\n [SpanStatusCode.OK]: 'StatusCode.OK',\n [SpanStatusCode.UNSET]: 'StatusCode.UNSET',\n };\n return statusMap[code] || 'StatusCode.UNSET';\n }\n\n private toNanoseconds(time: [number, number]): string {\n return (BigInt(time[0]) * BigInt(1e9) + BigInt(time[1])).toString();\n };\n\n export(spans: ReadableSpan[]): Promise<ExportResultCode> {\n if (!this.enableTracing) {\n return Promise.resolve(ExportResultCode.SUCCESS);\n }\n\n const requestData = spans.map(span => ({\n name: span.name,\n context: {\n trace_id: span.spanContext().traceId,\n span_id: span.spanContext().spanId,\n trace_state: span.spanContext().traceState?.serialize() || '',\n },\n kind: this.spanKindToString(span.kind),\n parent_id: span.parentSpanId || null,\n start_time: this.toNanoseconds(span.startTime),\n end_time: this.toNanoseconds(span.endTime),\n status: {\n status_code: this.statusCodeToString(span.status.code),\n description: span.status.message,\n },\n attributes: this.attributesToObject(span.attributes),\n events: span.events.map(event => ({\n name: event.name,\n timestamp: this.toNanoseconds(event.time),\n attributes: this.attributesToObject(event.attributes),\n })),\n links: span.links.map(link => ({\n context: link.context,\n attributes: this.attributesToObject(link.attributes),\n })),\n resource: {\n attributes: {\n ...span.resource.attributes,\n \"service.name\": \"prompt-layer-js\",\n },\n schema_url: '',\n },\n }));\n\n return fetch(this.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-KEY': this.apiKey || '',\n },\n body: JSON.stringify({\n spans: requestData,\n }),\n })\n .then(response => {\n if (!response.ok) {\n console.error(`Error exporting spans\\nHTTP error! status: ${response.status}`);\n return ExportResultCode.FAILED;\n }\n return ExportResultCode.SUCCESS;\n })\n .catch((error) => {\n console.error('Error exporting spans:', error);\n return ExportResultCode.FAILED;\n });\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nexport default PromptLayerSpanExporter;\n","import {getTracer} from \"@/tracing\";\nimport {promptlayerApiHandler} from \"@/utils\";\n\nconst tracer = getTracer();\n\nexport const promptLayerBase = (\n apiKey: string,\n llm: object,\n function_name = \"\",\n provider = \"openai\"\n) => {\n const handler: ProxyHandler<any> = {\n construct: (target, args) => {\n const newTarget = Reflect.construct(target, args);\n Object.defineProperties(newTarget, {\n function_name: {\n value: function_name,\n writable: true,\n },\n provider: {\n value: provider,\n },\n });\n return new Proxy(newTarget, handler);\n },\n get: (target, prop, receiver) => {\n const value = target[prop];\n const function_name = `${Reflect.get(\n target,\n \"function_name\"\n )}.${prop.toString()}`;\n\n if (typeof value === \"object\") {\n Object.defineProperties(value, {\n function_name: {\n value: function_name,\n writable: true,\n },\n provider: {\n value: provider,\n },\n });\n return new Proxy(value, handler);\n }\n\n if (typeof value === \"function\") {\n return (...args: any[]) => {\n const request_start_time = new Date().toISOString();\n const provider_type = Reflect.get(target, \"provider\");\n const return_pl_id = args[0]?.return_pl_id;\n const pl_tags = args[0]?.pl_tags;\n delete args[0]?.return_pl_id;\n delete args[0]?.pl_tags;\n\n return tracer.startActiveSpan(`${provider_type}.${function_name}`, async (span: any) => {\n try {\n span.setAttribute('function_input', JSON.stringify(args));\n const response = Reflect.apply(value, target, args);\n const spanId = span.spanContext().spanId;\n\n if (response instanceof Promise) {\n return new Promise((resolve, reject) => {\n response\n .then(async (request_response) => {\n const response = await promptlayerApiHandler(apiKey, {\n api_key: apiKey,\n provider_type,\n function_name,\n request_start_time,\n request_end_time: new Date().toISOString(),\n request_response,\n kwargs: args[0],\n return_pl_id,\n tags: pl_tags,\n span_id: spanId,\n });\n\n span.setAttribute('function_output', JSON.stringify(response));\n span.setAttribute('response_status', 'success');\n span.end();\n resolve(response);\n })\n .catch((error) => {\n span.recordException(error);\n span.setAttribute('response_status', 'error');\n span.end();\n reject(error);\n });\n });\n }\n\n span.setAttribute('function_output', JSON.stringify(response));\n span.setAttribute('response_status', 'success');\n span.end();\n return response;\n } catch (error) {\n span.recordException(error);\n span.setAttribute('response_status', 'error');\n span.end();\n throw error;\n }\n });\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n };\n\n return new Proxy(llm, handler);\n};\n","import * as opentelemetry from '@opentelemetry/api';\nimport { getTracer } from '@/tracing';\n\nexport const wrapWithSpan = (functionName: string, func: Function, attributes?: Record<string, any>) => {\n return function (...args: any[]) {\n const tracer = getTracer();\n\n const wrapperFunction = (span: opentelemetry.Span) => {\n try {\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n span.setAttribute(key, value);\n });\n }\n\n span.setAttribute('function_input', JSON.stringify(args));\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result.then((resolvedResult) => {\n span.setAttribute('function_output', JSON.stringify(resolvedResult));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n return resolvedResult;\n }).catch((error) => {\n handleError(span, error, args);\n throw error;\n }).finally(() => span.end());\n } else {\n span.setAttribute('function_output', JSON.stringify(result));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n handleError(span, error, args);\n throw error;\n }\n };\n\n return tracer.startActiveSpan(functionName, wrapperFunction);\n };\n};\n\nconst handleError = (span: opentelemetry.Span, error: any, args: any[]) => {\n span.setAttribute('function_input', JSON.stringify(args));\n span.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n span.end();\n}\n","import {\n GetPromptTemplateParams,\n Pagination,\n PublishPromptTemplate,\n} from \"@/types\";\nimport {\n getAllPromptTemplates,\n getPromptTemplate,\n publishPromptTemplate,\n} from \"@/utils\";\n\nexport class TemplateManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n get = (promptName: string, params?: Partial<GetPromptTemplateParams>) =>\n getPromptTemplate(this.apiKey, promptName, params);\n\n publish = (body: PublishPromptTemplate) =>\n publishPromptTemplate(this.apiKey, body);\n\n all = (params?: Pagination) => getAllPromptTemplates(this.apiKey, params);\n}\n","import { TrackGroup, TrackMetadata, TrackPrompt, TrackScore } from \"@/types\";\nimport {\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n} from \"@/utils\";\n\nconst metadata = (apiKey: string, body: TrackMetadata): Promise<boolean> => {\n if (!(body.metadata instanceof Object)) {\n throw new Error(\"Please provide a dictionary of metadata.\");\n }\n for (const [key, value] of Object.entries(body.metadata)) {\n if (typeof key !== \"string\" || typeof value !== \"string\") {\n throw new Error(\n \"Please provide a dictionary of metadata with key value pair of strings.\"\n );\n }\n }\n return promptLayerTrackMetadata(apiKey, body);\n};\n\nconst score = (apiKey: string, body: TrackScore): Promise<boolean> => {\n if (typeof body.score !== \"number\") {\n throw new Error(\"Score must be a number\");\n }\n if (body.score < 0 || body.score > 100) {\n throw new Error(\"Score must be a number between 0 and 100.\");\n }\n return promptLayerTrackScore(apiKey, body);\n};\n\nconst prompt = (apiKey: string, body: TrackPrompt): Promise<boolean> => {\n if (!(body.prompt_input_variables instanceof Object)) {\n throw new Error(\"Prompt template input variable dictionary not provided.\");\n }\n return promptLayerTrackPrompt(apiKey, body);\n};\n\nconst group = (apiKey: string, body: TrackGroup) =>\n promptLayerTrackGroup(apiKey, body);\n\nexport class TrackManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n group = (body: TrackGroup) => group(this.apiKey, body);\n\n metadata = (body: TrackMetadata) => metadata(this.apiKey, body);\n\n prompt = (body: TrackPrompt) => prompt(this.apiKey, body);\n\n score = (body: TrackScore) => score(this.apiKey, body);\n}\n"],"mappings":"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","names":["src_exports","__export","PromptLayer","__toCommonJS","URL_API_PROMPTLAYER","promptlayerApiHandler","apiKey","body","__async","proxyGenerator","promptLayerApiRequest","response","data","warnOnBadResponse","e","promptLayerTrackMetadata","__spreadProps","__spreadValues","promptLayerTrackScore","promptLayerTrackPrompt","promptLayerTrackGroup","promptLayerCreateGroup","getPromptTemplate","promptName","params","url","publishPromptTemplate","getAllPromptTemplates","_a","key","value","openaiStreamChat","results","_b","_c","_d","_e","content","functionCall","lastResult","toolCalls","result","delta","toolCall","lastToolCall","anthropicStreamMessage","cleaned_result","function_name","prev","current","final_result","generator","__asyncGenerator","iter","__forAwait","more","temp","error","__await","request_response","request_id","main_message","trackRequest","openaiStreamCompletion","text","anthropicStreamCompletion","completion","streamResponse","afterStream","mapResults","openaiChatRequest","client","kwargs","openaiCompletionsRequest","MAP_TYPE_TO_OPENAI_FUNCTION","openaiRequest","promptBlueprint","OpenAI","requestToMake","anthropicChatRequest","anthropicCompletionsRequest","MAP_TYPE_TO_ANTHROPIC_FUNCTION","anthropicRequest","Anthropic","utilLogRequest","GroupManager","apiKey","promptLayerCreateGroup","opentelemetry","import_sdk_trace_base","import_sdk_trace_node","import_api","import_core","PromptLayerSpanExporter","enableTracing","apiKey","URL_API_PROMPTLAYER","attributes","kind","code","time","spans","requestData","span","_a","event","link","__spreadProps","__spreadValues","response","error","span_exporter_default","getTracer","name","setupTracing","enableTracing","apiKey","provider","exporter","span_exporter_default","processor","tracer","getTracer","promptLayerBase","apiKey","llm","function_name","provider","handler","target","args","newTarget","prop","receiver","value","_a","_b","_c","_d","request_start_time","provider_type","return_pl_id","pl_tags","span","__async","response","spanId","resolve","reject","request_response","promptlayerApiHandler","error","opentelemetry","wrapWithSpan","functionName","func","attributes","args","tracer","getTracer","wrapperFunction","span","key","value","result","resolvedResult","error","handleError","TemplateManager","apiKey","promptName","params","getPromptTemplate","body","publishPromptTemplate","getAllPromptTemplates","metadata","apiKey","body","key","value","promptLayerTrackMetadata","score","promptLayerTrackScore","prompt","promptLayerTrackPrompt","group","promptLayerTrackGroup","TrackManager","opentelemetry","MAP_PROVIDER_TO_FUNCTION_NAME","openaiStreamChat","openaiStreamCompletion","anthropicStreamMessage","anthropicStreamCompletion","MAP_PROVIDER_TO_FUNCTION","openaiRequest","anthropicRequest","PromptLayer","apiKey","enableTracing","TemplateManager","GroupManager","TrackManager","wrapWithSpan","setupTracing","module","promptLayerBase","_0","__async","promptName","promptVersion","promptReleaseLabel","inputVariables","tags","metadata","groupId","stream","getTracer","span","functionInput","prompt_input_variables","templateGetParams","promptBlueprint","promptTemplate","promptBlueprintMetadata","promptBlueprintModel","provider_type","request_start_time","kwargs","config","function_name","stream_function","request_function","provider_base_url","response","_trackRequest","body","request_end_time","trackRequest","__spreadValues","streamResponse","requestLog","functionOutput","error","utilLogRequest"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/groups.ts","../src/tracing.ts","../src/span-exporter.ts","../src/promptlayer.ts","../src/span-wrapper.ts","../src/templates.ts","../src/track.ts"],"sourcesContent":["import { GroupManager } from \"@/groups\";\nimport { promptLayerBase } from \"@/promptlayer\";\nimport { wrapWithSpan } from \"@/span-wrapper\";\nimport { TemplateManager } from \"@/templates\";\nimport { getTracer, setupTracing } from \"@/tracing\";\nimport { TrackManager } from \"@/track\";\nimport { GetPromptTemplateParams, LogRequest, RunRequest, WorkflowRequest, WorkflowResponse } from \"@/types\";\nimport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n azureOpenAIRequest,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n runWorkflowRequest,\n streamResponse,\n trackRequest,\n utilLogRequest,\n} from \"@/utils\";\nimport * as opentelemetry from \"@opentelemetry/api\";\n\nconst MAP_PROVIDER_TO_FUNCTION_NAME = {\n openai: {\n chat: {\n function_name: \"openai.chat.completions.create\",\n stream_function: openaiStreamChat,\n },\n completion: {\n function_name: \"openai.completions.create\",\n stream_function: openaiStreamCompletion,\n },\n },\n anthropic: {\n chat: {\n function_name: \"anthropic.messages.create\",\n stream_function: anthropicStreamMessage,\n },\n completion: {\n function_name: \"anthropic.completions.create\",\n stream_function: anthropicStreamCompletion,\n },\n },\n \"openai.azure\": {\n chat: {\n function_name: \"openai.AzureOpenAI.chat.completions.create\",\n stream_function: openaiStreamChat,\n },\n completion: {\n function_name: \"openai.AzureOpenAI.completions.create\",\n stream_function: openaiStreamCompletion,\n },\n },\n};\n\nconst MAP_PROVIDER_TO_FUNCTION: Record<string, any> = {\n openai: openaiRequest,\n anthropic: anthropicRequest,\n \"openai.azure\": azureOpenAIRequest,\n};\n\nexport interface ClientOptions {\n apiKey?: string;\n enableTracing?: boolean;\n workspaceId?: number;\n}\n\nexport class PromptLayer {\n apiKey: string;\n templates: TemplateManager;\n group: GroupManager;\n track: TrackManager;\n enableTracing: boolean;\n wrapWithSpan: typeof wrapWithSpan;\n\n constructor({\n apiKey = process.env.PROMPTLAYER_API_KEY,\n enableTracing = false,\n }: ClientOptions = {}) {\n if (apiKey === undefined) {\n throw new Error(\n \"PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.\"\n );\n }\n\n this.apiKey = apiKey;\n this.enableTracing = enableTracing;\n this.templates = new TemplateManager(apiKey);\n this.group = new GroupManager(apiKey);\n this.track = new TrackManager(apiKey);\n this.wrapWithSpan = wrapWithSpan;\n\n if (enableTracing) {\n setupTracing(enableTracing, apiKey);\n }\n }\n\n get Anthropic() {\n try {\n const module = require(\"@anthropic-ai/sdk\").default;\n return promptLayerBase(this.apiKey, module, \"anthropic\", \"anthropic\");\n } catch (e) {\n console.error(\n \"To use the Anthropic module, you must install the @anthropic-ai/sdk package.\"\n );\n }\n }\n\n get OpenAI() {\n try {\n const module = require(\"openai\").default;\n return promptLayerBase(this.apiKey, module, \"openai\", \"openai\");\n } catch (e) {\n console.error(\n \"To use the OpenAI module, you must install the @openai/api package.\"\n );\n }\n }\n\n async run({\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream = false,\n }: RunRequest) {\n const tracer = getTracer();\n\n return tracer.startActiveSpan(\"PromptLayer Run\", async (span) => {\n try {\n const functionInput = {\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream,\n };\n span.setAttribute(\"function_input\", JSON.stringify(functionInput));\n\n const prompt_input_variables = inputVariables;\n const templateGetParams: GetPromptTemplateParams = {\n label: promptReleaseLabel,\n version: promptVersion,\n metadata_filters: metadata,\n };\n if (inputVariables) templateGetParams.input_variables = inputVariables;\n\n const promptBlueprint = await this.templates.get(\n promptName,\n templateGetParams\n );\n\n if (!promptBlueprint) throw new Error(\"Prompt not found\");\n\n const promptTemplate = promptBlueprint.prompt_template;\n if (!promptBlueprint.llm_kwargs) {\n throw new Error(\n `Prompt '${promptName}' does not have any LLM kwargs associated with it.`\n );\n }\n\n const promptBlueprintMetadata = promptBlueprint.metadata;\n if (!promptBlueprintMetadata) {\n throw new Error(\n `Prompt '${promptName}' does not have any metadata associated with it.`\n );\n }\n\n const promptBlueprintModel = promptBlueprintMetadata.model;\n if (!promptBlueprintModel) {\n throw new Error(\n `Prompt '${promptName}' does not have a model parameters associated with it.`\n );\n }\n\n const provider_type = promptBlueprintModel.provider;\n\n const request_start_time = new Date().toISOString();\n const kwargs = promptBlueprint.llm_kwargs;\n const config =\n MAP_PROVIDER_TO_FUNCTION_NAME[\n provider_type as keyof typeof MAP_PROVIDER_TO_FUNCTION_NAME\n ][promptTemplate.type];\n const function_name = config.function_name;\n\n const stream_function = config.stream_function;\n const request_function = MAP_PROVIDER_TO_FUNCTION[provider_type];\n const provider_base_url = promptBlueprint.provider_base_url;\n if (provider_base_url) {\n kwargs[\"baseURL\"] = provider_base_url.url;\n }\n kwargs[\"stream\"] = stream;\n if (stream && [\"openai\", \"openai.azure\"].includes(provider_type)) {\n kwargs[\"stream_options\"] = { include_usage: true };\n }\n\n const response = await request_function(promptBlueprint, kwargs);\n\n const _trackRequest = (body: object) => {\n const request_end_time = new Date().toISOString();\n return trackRequest({\n function_name,\n provider_type,\n args: [],\n kwargs,\n tags,\n request_start_time,\n request_end_time,\n api_key: this.apiKey,\n metadata,\n prompt_id: promptBlueprint.id,\n prompt_version: promptBlueprint.version,\n prompt_input_variables,\n group_id: groupId,\n return_prompt_blueprint: true,\n span_id: span.spanContext().spanId,\n ...body,\n });\n };\n\n if (stream)\n return streamResponse(response, _trackRequest, stream_function);\n const requestLog = await _trackRequest({ request_response: response });\n\n const functionOutput = {\n request_id: requestLog.request_id,\n raw_response: response,\n prompt_blueprint: requestLog.prompt_blueprint,\n };\n span.setAttribute(\"function_output\", JSON.stringify(functionOutput));\n\n return functionOutput;\n } catch (error) {\n span.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n throw error;\n } finally {\n span.end();\n }\n });\n }\n\n async runWorkflow({\n workflowName,\n inputVariables = {},\n metadata = {},\n workflowLabelName = null,\n workflowVersionNumber = null,\n }: WorkflowRequest): Promise<WorkflowResponse> {\n try {\n const result = await runWorkflowRequest({\n workflow_name: workflowName,\n input_variables: inputVariables,\n metadata,\n workflow_label_name: workflowLabelName,\n workflow_version_number: workflowVersionNumber,\n api_key: this.apiKey,\n });\n return result;\n } catch (error) {\n if (error instanceof Error) {\n console.error(\"Error running workflow:\", error.message);\n throw new Error(`Error running workflow: ${error.message}`);\n } else {\n console.error(\"Unknown error running workflow:\", error);\n throw new Error(\"Unknown error running workflow\");\n }\n }\n }\n\n async logRequest(body: LogRequest) {\n return utilLogRequest(this.apiKey, body);\n }\n}\n","import {\n GetPromptTemplateParams,\n GetPromptTemplateResponse,\n ListPromptTemplatesResponse,\n LogRequest,\n Pagination,\n PublishPromptTemplate,\n PublishPromptTemplateResponse,\n RequestLog,\n TrackGroup,\n TrackMetadata,\n TrackPrompt,\n TrackRequest,\n TrackScore,\n WorkflowResponse,\n} from \"@/types\";\nimport type TypeAnthropic from \"@anthropic-ai/sdk\";\nimport {\n Completion as AnthropicCompletion,\n Message,\n MessageStreamEvent,\n} from \"@anthropic-ai/sdk/resources\";\nimport type TypeOpenAI from \"openai\";\nimport {\n ChatCompletion,\n ChatCompletionChunk,\n Completion,\n} from \"openai/resources\";\n\nexport const URL_API_PROMPTLAYER =\n process.env.URL_API_PROMPTLAYER || \"https://api.promptlayer.com\";\n\nconst promptlayerApiHandler = async <Item>(\n apiKey: string,\n body: TrackRequest & {\n request_response: AsyncIterable<Item> | any;\n }\n) => {\n const isGenerator = body.request_response[Symbol.asyncIterator] !== undefined;\n if (isGenerator) {\n return proxyGenerator(apiKey, body.request_response, body);\n }\n return await promptLayerApiRequest(apiKey, body);\n};\n\nconst promptLayerApiRequest = async (apiKey: string, body: TrackRequest) => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-request`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While logging your request, PromptLayer experienced the following error:\"\n );\n }\n if (data && body.return_pl_id) {\n return [body.request_response, data.request_id];\n }\n } catch (e) {\n console.warn(\n `WARNING: While logging your request PromptLayer had the following error: ${e}`\n );\n }\n return body.request_response;\n};\n\nconst promptLayerTrackMetadata = async (\n apiKey: string,\n body: TrackMetadata\n): Promise<boolean> => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/library-track-metadata`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n }\n );\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While logging metadata to your request, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackScore = async (\n apiKey: string,\n body: TrackScore\n): Promise<boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/library-track-score`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While scoring your request, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While scoring your request, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackPrompt = async (\n apiKey: string,\n body: TrackPrompt\n): Promise<boolean> => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/library-track-prompt`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n }\n );\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerTrackGroup = async (\n apiKey: string,\n body: TrackGroup\n): Promise<boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-group`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While associating your request with a group, PromptLayer experienced the following error\"\n );\n return false;\n }\n } catch (e) {\n console.warn(\n `WARNING: While associating your request with a group, PromptLayer experienced the following error: ${e}`\n );\n return false;\n }\n return true;\n};\n\nconst promptLayerCreateGroup = async (\n apiKey: string\n): Promise<number | boolean> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/create-group`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n api_key: apiKey,\n }),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While creating a group PromptLayer had the following error\"\n );\n return false;\n }\n return data.id;\n } catch (e) {\n console.warn(\n `WARNING: While creating a group PromptLayer had the following error: ${e}`\n );\n return false;\n }\n};\n\nconst getPromptTemplate = async (\n apiKey: string,\n promptName: string,\n params?: Partial<GetPromptTemplateParams>\n) => {\n try {\n const url = new URL(\n `${URL_API_PROMPTLAYER}/prompt-templates/${promptName}`\n );\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n body: JSON.stringify(params),\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While fetching a prompt template PromptLayer had the following error\"\n );\n return null;\n }\n if (data.warning) {\n console.warn(\n `WARNING: While tracking your prompt PromptLayer had the following error: ${data.warning}`\n );\n }\n return data as Promise<GetPromptTemplateResponse>;\n } catch (e) {\n console.warn(\n `WARNING: While fetching a prompt template PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nconst publishPromptTemplate = async (\n apiKey: string,\n body: PublishPromptTemplate\n) => {\n try {\n const response = await fetch(\n `${URL_API_PROMPTLAYER}/rest/prompt-templates`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n body: JSON.stringify({\n prompt_template: { ...body },\n prompt_version: { ...body },\n release_labels: body.release_labels ? body.release_labels : undefined,\n }),\n }\n );\n const data = await response.json();\n if (response.status === 400) {\n warnOnBadResponse(\n data,\n \"WARNING: While publishing a prompt template PromptLayer had the following error\"\n );\n }\n return data as Promise<PublishPromptTemplateResponse>;\n } catch (e) {\n console.warn(\n `WARNING: While publishing a prompt template PromptLayer had the following error: ${e}`\n );\n }\n};\n\nconst getAllPromptTemplates = async (\n apiKey: string,\n params?: Partial<Pagination>\n) => {\n try {\n const url = new URL(`${URL_API_PROMPTLAYER}/prompt-templates`);\n Object.entries(params || {}).forEach(([key, value]) =>\n url.searchParams.append(key, value.toString())\n );\n const response = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": apiKey,\n },\n });\n const data = await response.json();\n if (response.status !== 200) {\n warnOnBadResponse(\n data,\n \"WARNING: While fetching all prompt templates PromptLayer had the following error\"\n );\n return null;\n }\n return (data.items ?? []) as Promise<Array<ListPromptTemplatesResponse>>;\n } catch (e) {\n console.warn(\n `WARNING: While fetching all prompt templates PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nexport const runWorkflowRequest = async ({\n workflow_name,\n input_variables,\n metadata = {},\n workflow_label_name = null,\n workflow_version_number = null,\n api_key,\n }: {\n workflow_name: string;\n input_variables: Record<string, any>;\n metadata?: Record<string, string>;\n workflow_label_name?: string | null;\n workflow_version_number?: number | null;\n api_key: string;\n}): Promise<WorkflowResponse> => {\n const payload = {\n input_variables,\n metadata,\n workflow_label_name,\n workflow_version_number,\n };\n\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/workflows/${workflow_name}/run`, {\n method: 'POST',\n headers: {\n 'X-API-KEY': api_key,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n\n if (response.status !== 201) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(`Failed to run workflow: ${errorData.error || response.statusText}`);\n }\n\n const result = await response.json();\n return result;\n } catch (error) {\n console.error(`Failed to run workflow: ${(error as Error).message}`);\n throw error;\n }\n};\n\nconst openaiStreamChat = (results: ChatCompletionChunk[]): ChatCompletion => {\n let content: ChatCompletion.Choice[\"message\"][\"content\"] = null;\n let functionCall: ChatCompletion.Choice[\"message\"][\"function_call\"] =\n undefined;\n const response: ChatCompletion = {\n id: \"\",\n choices: [],\n created: Date.now(),\n model: \"\",\n object: \"chat.completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let toolCalls: ChatCompletion.Choice[\"message\"][\"tool_calls\"] = undefined;\n for (const result of results) {\n if (result.choices.length === 0) continue;\n const delta = result.choices[0].delta;\n\n if (delta.content) {\n content = `${content || \"\"}${delta.content || \"\"}`;\n }\n if (delta.function_call) {\n functionCall = {\n name: `${functionCall ? functionCall.name : \"\"}${\n delta.function_call.name || \"\"\n }`,\n arguments: `${functionCall ? functionCall.arguments : \"\"}${\n delta.function_call.arguments || \"\"\n }`,\n };\n }\n const toolCall = delta.tool_calls?.[0];\n if (toolCall) {\n toolCalls = toolCalls || [];\n const lastToolCall = toolCalls.at(-1);\n if (!lastToolCall || toolCall.id) {\n toolCalls.push({\n id: toolCall.id || \"\",\n type: toolCall.type || \"function\",\n function: {\n name: toolCall.function?.name || \"\",\n arguments: toolCall.function?.arguments || \"\",\n },\n });\n continue;\n }\n lastToolCall.function.name = `${lastToolCall.function.name}${\n toolCall.function?.name || \"\"\n }`;\n lastToolCall.function.arguments = `${lastToolCall.function.arguments}${\n toolCall.function?.arguments || \"\"\n }`;\n }\n }\n const firstChoice = results[0].choices.at(0);\n response.choices.push({\n finish_reason: firstChoice?.finish_reason ?? \"stop\",\n index: firstChoice?.index ?? 0,\n logprobs: firstChoice?.logprobs ?? null,\n message: {\n role: \"assistant\",\n content,\n function_call: functionCall ? functionCall : undefined,\n tool_calls: toolCalls ? toolCalls : undefined,\n refusal: firstChoice?.delta.refusal ?? null,\n },\n });\n response.id = lastResult.id;\n response.model = lastResult.model;\n response.created = lastResult.created;\n response.system_fingerprint = lastResult.system_fingerprint;\n response.usage = lastResult.usage;\n return response;\n};\n\nconst anthropicStreamMessage = (results: MessageStreamEvent[]): Message => {\n let response: Message = {\n id: \"\",\n model: \"\",\n content: [],\n role: \"assistant\",\n type: \"message\",\n stop_reason: \"stop_sequence\",\n stop_sequence: null,\n usage: {\n input_tokens: 0,\n output_tokens: 0,\n },\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let content = \"\";\n for (const result of results) {\n switch (result.type) {\n case \"message_start\": {\n response = {\n ...result.message,\n };\n break;\n }\n case \"content_block_delta\": {\n if (result.delta.type === \"text_delta\")\n content = `${content}${result.delta.text}`;\n }\n case \"message_delta\": {\n if (\"usage\" in result)\n response.usage.output_tokens = result.usage.output_tokens;\n if (\"stop_reason\" in result.delta)\n response.stop_reason = result.delta.stop_reason;\n }\n default: {\n break;\n }\n }\n }\n response.content.push({\n type: \"text\",\n text: content,\n });\n return response;\n};\n\nconst cleaned_result = (\n results: any[],\n function_name = \"openai.chat.completions.create\"\n) => {\n if (\"completion\" in results[0]) {\n return results.reduce(\n (prev, current) => ({\n ...current,\n completion: `${prev.completion}${current.completion}`,\n }),\n {}\n );\n }\n\n if (function_name === \"anthropic.messages.create\")\n return anthropicStreamMessage(results);\n\n if (\"text\" in results[0].choices[0]) {\n let response = \"\";\n for (const result of results) {\n response = `${response}${result.choices[0].text}`;\n }\n const final_result = structuredClone(results.at(-1));\n final_result.choices[0].text = response;\n return final_result;\n }\n\n if (\"delta\" in results[0].choices[0]) {\n const response = openaiStreamChat(results);\n response.choices[0] = {\n ...response.choices[0],\n ...response.choices[0].message,\n };\n return response;\n }\n\n return \"\";\n};\n\nasync function* proxyGenerator<Item>(\n apiKey: string,\n generator: AsyncIterable<Item>,\n body: TrackRequest\n) {\n const results = [];\n for await (const value of generator) {\n yield body.return_pl_id ? [value, null] : value;\n results.push(value);\n }\n const request_response = cleaned_result(results, body.function_name);\n const response = await promptLayerApiRequest(apiKey, {\n ...body,\n request_response,\n request_end_time: new Date().toISOString(),\n });\n if (response) {\n if (body.return_pl_id) {\n const request_id = (response as any)[1];\n const lastResult = results.at(-1);\n yield [lastResult, request_id];\n }\n }\n}\n\nconst warnOnBadResponse = (request_response: any, main_message: string) => {\n try {\n console.warn(`${main_message}: ${request_response.message}`);\n } catch (e) {\n console.warn(`${main_message}: ${request_response}`);\n }\n};\n\nconst trackRequest = async (body: TrackRequest) => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/track-request`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (response.status !== 200)\n warnOnBadResponse(\n response,\n \"WARNING: While logging your request, PromptLayer experienced the following error:\"\n );\n return response.json();\n } catch (e) {\n console.warn(\n `WARNING: While logging your request PromptLayer had the following error: ${e}`\n );\n }\n return {};\n};\n\nconst openaiStreamCompletion = (results: Completion[]) => {\n const response: Completion = {\n id: \"\",\n choices: [\n {\n finish_reason: \"stop\",\n index: 0,\n text: \"\",\n logprobs: null,\n },\n ],\n created: Date.now(),\n model: \"\",\n object: \"text_completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let text = \"\";\n for (const result of results) {\n if (result.choices.length > 0 && result.choices[0].text) {\n text = `${text}${result.choices[0].text}`;\n }\n }\n response.choices[0].text = text;\n response.id = lastResult.id;\n response.created = lastResult.created;\n response.model = lastResult.model;\n response.system_fingerprint = lastResult.system_fingerprint;\n response.usage = lastResult.usage;\n return response;\n};\n\nconst anthropicStreamCompletion = (results: AnthropicCompletion[]) => {\n const response: AnthropicCompletion = {\n completion: \"\",\n id: \"\",\n model: \"\",\n stop_reason: \"\",\n type: \"completion\",\n };\n const lastResult = results.at(-1);\n if (!lastResult) return response;\n let completion = \"\";\n for (const result of results) {\n completion = `${completion}${result.completion}`;\n }\n response.completion = completion;\n response.id = lastResult.id;\n response.model = lastResult.model;\n response.stop_reason = lastResult.stop_reason;\n return response;\n};\n\nasync function* streamResponse<Item>(\n generator: AsyncIterable<Item>,\n afterStream: (body: object) => any,\n mapResults: any\n) {\n const data: {\n request_id: number | null;\n raw_response: any;\n prompt_blueprint: any;\n } = {\n request_id: null,\n raw_response: null,\n prompt_blueprint: null,\n };\n const results = [];\n for await (const result of generator) {\n results.push(result);\n data.raw_response = result;\n yield data;\n }\n const request_response = mapResults(results);\n const response = await afterStream({ request_response });\n data.request_id = response.request_id;\n data.prompt_blueprint = response.prompt_blueprint;\n yield data;\n}\n\nconst openaiChatRequest = async (client: TypeOpenAI, kwargs: any) => {\n return client.chat.completions.create(kwargs);\n};\n\nconst openaiCompletionsRequest = async (client: TypeOpenAI, kwargs: any) => {\n return client.completions.create(kwargs);\n};\n\nconst MAP_TYPE_TO_OPENAI_FUNCTION = {\n chat: openaiChatRequest,\n completion: openaiCompletionsRequest,\n};\n\nconst openaiRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const OpenAI = require(\"openai\").default;\n const client = new OpenAI({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_OPENAI_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst azureOpenAIRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const OpenAI = require(\"openai\").AzureOpenAI;\n const client = new OpenAI({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_OPENAI_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst anthropicChatRequest = async (client: TypeAnthropic, kwargs: any) => {\n return client.messages.create(kwargs);\n};\n\nconst anthropicCompletionsRequest = async (\n client: TypeAnthropic,\n kwargs: any\n) => {\n return client.completions.create(kwargs);\n};\n\nconst MAP_TYPE_TO_ANTHROPIC_FUNCTION = {\n chat: anthropicChatRequest,\n completion: anthropicCompletionsRequest,\n};\n\nconst anthropicRequest = async (\n promptBlueprint: GetPromptTemplateResponse,\n kwargs: any\n) => {\n const Anthropic = require(\"@anthropic-ai/sdk\").default;\n const client = new Anthropic({\n baseURL: kwargs.baseURL,\n });\n const requestToMake =\n MAP_TYPE_TO_ANTHROPIC_FUNCTION[promptBlueprint.prompt_template.type];\n return requestToMake(client, kwargs);\n};\n\nconst utilLogRequest = async (\n apiKey: string,\n body: LogRequest\n): Promise<RequestLog | null> => {\n try {\n const response = await fetch(`${URL_API_PROMPTLAYER}/log-request`, {\n method: \"POST\",\n headers: {\n \"X-API-KEY\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (response.status !== 201) {\n warnOnBadResponse(\n response,\n \"WARNING: While logging your request PromptLayer had the following error\"\n );\n return null;\n }\n return response.json();\n } catch (e) {\n console.warn(\n `WARNING: While tracking your prompt PromptLayer had the following error: ${e}`\n );\n return null;\n }\n};\n\nexport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n azureOpenAIRequest,\n getAllPromptTemplates,\n getPromptTemplate,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n promptlayerApiHandler,\n promptLayerApiRequest,\n promptLayerCreateGroup,\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n publishPromptTemplate,\n streamResponse,\n trackRequest,\n utilLogRequest,\n};\n","import { promptLayerCreateGroup } from \"@/utils\";\n\nexport class GroupManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n create = () => promptLayerCreateGroup(this.apiKey);\n}\n","import * as opentelemetry from '@opentelemetry/api';\nimport {SimpleSpanProcessor} from '@opentelemetry/sdk-trace-base';\nimport {NodeTracerProvider} from '@opentelemetry/sdk-trace-node';\nimport PromptLayerSpanExporter from '@/span-exporter';\n\nexport const getTracer = (name: string = 'promptlayer-tracer') => {\n return opentelemetry.trace.getTracer(name);\n}\n\nexport const setupTracing = (enableTracing: boolean, apiKey?: string) => {\n const provider = new NodeTracerProvider();\n const exporter = new PromptLayerSpanExporter(enableTracing, apiKey);\n const processor = new SimpleSpanProcessor(exporter);\n provider.addSpanProcessor(processor);\n provider.register();\n}\n","import {Attributes, SpanKind, SpanStatusCode} from '@opentelemetry/api';\nimport {ReadableSpan, SpanExporter} from '@opentelemetry/sdk-trace-base';\nimport {ExportResultCode} from '@opentelemetry/core';\nimport {URL_API_PROMPTLAYER} from '@/utils';\n\nclass PromptLayerSpanExporter implements SpanExporter {\n private apiKey: string | undefined;\n private enableTracing: boolean;\n private url: string;\n\n constructor(enableTracing: boolean, apiKey?: string) {\n this.apiKey = apiKey || process.env.PROMPTLAYER_API_KEY;\n this.enableTracing = enableTracing;\n this.url = `${URL_API_PROMPTLAYER}/spans-bulk`;\n }\n\n private attributesToObject(attributes: Attributes | undefined): Record<string, any> {\n if (!attributes) return {};\n return Object.fromEntries(Object.entries(attributes));\n }\n\n private spanKindToString(kind: SpanKind): string {\n const kindMap: Record<SpanKind, string> = {\n [SpanKind.INTERNAL]: 'SpanKind.INTERNAL',\n [SpanKind.SERVER]: 'SpanKind.SERVER',\n [SpanKind.CLIENT]: 'SpanKind.CLIENT',\n [SpanKind.PRODUCER]: 'SpanKind.PRODUCER',\n [SpanKind.CONSUMER]: 'SpanKind.CONSUMER',\n };\n return kindMap[kind] || 'SpanKind.INTERNAL';\n }\n\n private statusCodeToString(code: SpanStatusCode): string {\n const statusMap: Record<SpanStatusCode, string> = {\n [SpanStatusCode.ERROR]: 'StatusCode.ERROR',\n [SpanStatusCode.OK]: 'StatusCode.OK',\n [SpanStatusCode.UNSET]: 'StatusCode.UNSET',\n };\n return statusMap[code] || 'StatusCode.UNSET';\n }\n\n private toNanoseconds(time: [number, number]): string {\n return (BigInt(time[0]) * BigInt(1e9) + BigInt(time[1])).toString();\n };\n\n export(spans: ReadableSpan[]): Promise<ExportResultCode> {\n if (!this.enableTracing) {\n return Promise.resolve(ExportResultCode.SUCCESS);\n }\n\n const requestData = spans.map(span => ({\n name: span.name,\n context: {\n trace_id: span.spanContext().traceId,\n span_id: span.spanContext().spanId,\n trace_state: span.spanContext().traceState?.serialize() || '',\n },\n kind: this.spanKindToString(span.kind),\n parent_id: span.parentSpanId || null,\n start_time: this.toNanoseconds(span.startTime),\n end_time: this.toNanoseconds(span.endTime),\n status: {\n status_code: this.statusCodeToString(span.status.code),\n description: span.status.message,\n },\n attributes: this.attributesToObject(span.attributes),\n events: span.events.map(event => ({\n name: event.name,\n timestamp: this.toNanoseconds(event.time),\n attributes: this.attributesToObject(event.attributes),\n })),\n links: span.links.map(link => ({\n context: link.context,\n attributes: this.attributesToObject(link.attributes),\n })),\n resource: {\n attributes: {\n ...span.resource.attributes,\n \"service.name\": \"prompt-layer-js\",\n },\n schema_url: '',\n },\n }));\n\n return fetch(this.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-KEY': this.apiKey || '',\n },\n body: JSON.stringify({\n spans: requestData,\n }),\n })\n .then(response => {\n if (!response.ok) {\n console.error(`Error exporting spans\\nHTTP error! status: ${response.status}`);\n return ExportResultCode.FAILED;\n }\n return ExportResultCode.SUCCESS;\n })\n .catch((error) => {\n console.error('Error exporting spans:', error);\n return ExportResultCode.FAILED;\n });\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nexport default PromptLayerSpanExporter;\n","import {getTracer} from \"@/tracing\";\nimport {promptlayerApiHandler} from \"@/utils\";\n\nconst tracer = getTracer();\n\nexport const promptLayerBase = (\n apiKey: string,\n llm: object,\n function_name = \"\",\n provider = \"openai\"\n) => {\n const handler: ProxyHandler<any> = {\n construct: (target, args) => {\n const newTarget = Reflect.construct(target, args);\n Object.defineProperties(newTarget, {\n function_name: {\n value: function_name,\n writable: true,\n },\n provider: {\n value: provider,\n },\n });\n return new Proxy(newTarget, handler);\n },\n get: (target, prop, receiver) => {\n const value = target[prop];\n const function_name = `${Reflect.get(\n target,\n \"function_name\"\n )}.${prop.toString()}`;\n\n if (typeof value === \"object\") {\n Object.defineProperties(value, {\n function_name: {\n value: function_name,\n writable: true,\n },\n provider: {\n value: provider,\n },\n });\n return new Proxy(value, handler);\n }\n\n if (typeof value === \"function\") {\n return (...args: any[]) => {\n const request_start_time = new Date().toISOString();\n const provider_type = Reflect.get(target, \"provider\");\n const return_pl_id = args[0]?.return_pl_id;\n const pl_tags = args[0]?.pl_tags;\n delete args[0]?.return_pl_id;\n delete args[0]?.pl_tags;\n\n return tracer.startActiveSpan(`${provider_type}.${function_name}`, async (span: any) => {\n try {\n span.setAttribute('function_input', JSON.stringify(args));\n const response = Reflect.apply(value, target, args);\n const spanId = span.spanContext().spanId;\n\n if (response instanceof Promise) {\n return new Promise((resolve, reject) => {\n response\n .then(async (request_response) => {\n const response = await promptlayerApiHandler(apiKey, {\n api_key: apiKey,\n provider_type,\n function_name,\n request_start_time,\n request_end_time: new Date().toISOString(),\n request_response,\n kwargs: args[0],\n return_pl_id,\n tags: pl_tags,\n span_id: spanId,\n });\n\n span.setAttribute('function_output', JSON.stringify(response));\n span.setAttribute('response_status', 'success');\n span.end();\n resolve(response);\n })\n .catch((error) => {\n span.recordException(error);\n span.setAttribute('response_status', 'error');\n span.end();\n reject(error);\n });\n });\n }\n\n span.setAttribute('function_output', JSON.stringify(response));\n span.setAttribute('response_status', 'success');\n span.end();\n return response;\n } catch (error) {\n span.recordException(error);\n span.setAttribute('response_status', 'error');\n span.end();\n throw error;\n }\n });\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n };\n\n return new Proxy(llm, handler);\n};\n","import * as opentelemetry from '@opentelemetry/api';\nimport { getTracer } from '@/tracing';\n\nexport const wrapWithSpan = (functionName: string, func: Function, attributes?: Record<string, any>) => {\n return function (...args: any[]) {\n const tracer = getTracer();\n\n const wrapperFunction = (span: opentelemetry.Span) => {\n try {\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n span.setAttribute(key, value);\n });\n }\n\n span.setAttribute('function_input', JSON.stringify(args));\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result.then((resolvedResult) => {\n span.setAttribute('function_output', JSON.stringify(resolvedResult));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n return resolvedResult;\n }).catch((error) => {\n handleError(span, error, args);\n throw error;\n }).finally(() => span.end());\n } else {\n span.setAttribute('function_output', JSON.stringify(result));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n handleError(span, error, args);\n throw error;\n }\n };\n\n return tracer.startActiveSpan(functionName, wrapperFunction);\n };\n};\n\nconst handleError = (span: opentelemetry.Span, error: any, args: any[]) => {\n span.setAttribute('function_input', JSON.stringify(args));\n span.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n span.end();\n}\n","import {\n GetPromptTemplateParams,\n Pagination,\n PublishPromptTemplate,\n} from \"@/types\";\nimport {\n getAllPromptTemplates,\n getPromptTemplate,\n publishPromptTemplate,\n} from \"@/utils\";\n\nexport class TemplateManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n get = (promptName: string, params?: Partial<GetPromptTemplateParams>) =>\n getPromptTemplate(this.apiKey, promptName, params);\n\n publish = (body: PublishPromptTemplate) =>\n publishPromptTemplate(this.apiKey, body);\n\n all = (params?: Pagination) => getAllPromptTemplates(this.apiKey, params);\n}\n","import { TrackGroup, TrackMetadata, TrackPrompt, TrackScore } from \"@/types\";\nimport {\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n} from \"@/utils\";\n\nconst metadata = (apiKey: string, body: TrackMetadata): Promise<boolean> => {\n if (!(body.metadata instanceof Object)) {\n throw new Error(\"Please provide a dictionary of metadata.\");\n }\n for (const [key, value] of Object.entries(body.metadata)) {\n if (typeof key !== \"string\" || typeof value !== \"string\") {\n throw new Error(\n \"Please provide a dictionary of metadata with key value pair of strings.\"\n );\n }\n }\n return promptLayerTrackMetadata(apiKey, body);\n};\n\nconst score = (apiKey: string, body: TrackScore): Promise<boolean> => {\n if (typeof body.score !== \"number\") {\n throw new Error(\"Score must be a number\");\n }\n if (body.score < 0 || body.score > 100) {\n throw new Error(\"Score must be a number between 0 and 100.\");\n }\n return promptLayerTrackScore(apiKey, body);\n};\n\nconst prompt = (apiKey: string, body: TrackPrompt): Promise<boolean> => {\n if (!(body.prompt_input_variables instanceof Object)) {\n throw new Error(\"Prompt template input variable dictionary not provided.\");\n }\n return promptLayerTrackPrompt(apiKey, body);\n};\n\nconst group = (apiKey: string, body: TrackGroup) =>\n promptLayerTrackGroup(apiKey, body);\n\nexport class TrackManager {\n apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n group = (body: TrackGroup) => group(this.apiKey, body);\n\n metadata = (body: TrackMetadata) => metadata(this.apiKey, body);\n\n prompt = (body: TrackPrompt) => prompt(this.apiKey, body);\n\n score = (body: TrackScore) => score(this.apiKey, body);\n}\n"],"mappings":"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","names":["src_exports","__export","PromptLayer","__toCommonJS","URL_API_PROMPTLAYER","promptlayerApiHandler","apiKey","body","__async","proxyGenerator","promptLayerApiRequest","response","data","warnOnBadResponse","e","promptLayerTrackMetadata","__spreadProps","__spreadValues","promptLayerTrackScore","promptLayerTrackPrompt","promptLayerTrackGroup","promptLayerCreateGroup","getPromptTemplate","promptName","params","url","publishPromptTemplate","getAllPromptTemplates","_a","key","value","runWorkflowRequest","_0","workflow_name","input_variables","metadata","workflow_label_name","workflow_version_number","api_key","payload","errorData","error","openaiStreamChat","results","_b","_c","_d","_e","_f","_g","_h","_i","content","functionCall","lastResult","toolCalls","result","delta","toolCall","lastToolCall","firstChoice","anthropicStreamMessage","cleaned_result","function_name","prev","current","final_result","generator","__asyncGenerator","iter","__forAwait","more","temp","__await","request_response","request_id","main_message","trackRequest","openaiStreamCompletion","text","anthropicStreamCompletion","completion","streamResponse","afterStream","mapResults","openaiChatRequest","client","kwargs","openaiCompletionsRequest","MAP_TYPE_TO_OPENAI_FUNCTION","openaiRequest","promptBlueprint","OpenAI","requestToMake","azureOpenAIRequest","anthropicChatRequest","anthropicCompletionsRequest","MAP_TYPE_TO_ANTHROPIC_FUNCTION","anthropicRequest","Anthropic","utilLogRequest","GroupManager","apiKey","promptLayerCreateGroup","opentelemetry","import_sdk_trace_base","import_sdk_trace_node","import_api","import_core","PromptLayerSpanExporter","enableTracing","apiKey","URL_API_PROMPTLAYER","attributes","kind","code","time","spans","requestData","span","_a","event","link","__spreadProps","__spreadValues","response","error","span_exporter_default","getTracer","name","setupTracing","enableTracing","apiKey","provider","exporter","span_exporter_default","processor","tracer","getTracer","promptLayerBase","apiKey","llm","function_name","provider","handler","target","args","newTarget","prop","receiver","value","_a","_b","_c","_d","request_start_time","provider_type","return_pl_id","pl_tags","span","__async","response","spanId","resolve","reject","request_response","promptlayerApiHandler","error","opentelemetry","wrapWithSpan","functionName","func","attributes","args","tracer","getTracer","wrapperFunction","span","key","value","result","resolvedResult","error","handleError","TemplateManager","apiKey","promptName","params","getPromptTemplate","body","publishPromptTemplate","getAllPromptTemplates","metadata","apiKey","body","key","value","promptLayerTrackMetadata","score","promptLayerTrackScore","prompt","promptLayerTrackPrompt","group","promptLayerTrackGroup","TrackManager","opentelemetry","MAP_PROVIDER_TO_FUNCTION_NAME","openaiStreamChat","openaiStreamCompletion","anthropicStreamMessage","anthropicStreamCompletion","MAP_PROVIDER_TO_FUNCTION","openaiRequest","anthropicRequest","azureOpenAIRequest","PromptLayer","apiKey","enableTracing","TemplateManager","GroupManager","TrackManager","wrapWithSpan","setupTracing","module","promptLayerBase","_0","__async","promptName","promptVersion","promptReleaseLabel","inputVariables","tags","metadata","groupId","stream","getTracer","span","functionInput","prompt_input_variables","templateGetParams","promptBlueprint","promptTemplate","promptBlueprintMetadata","promptBlueprintModel","provider_type","request_start_time","kwargs","config","function_name","stream_function","request_function","provider_base_url","response","_trackRequest","body","request_end_time","trackRequest","__spreadValues","streamResponse","requestLog","functionOutput","error","workflowName","workflowLabelName","workflowVersionNumber","runWorkflowRequest","utilLogRequest"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "promptlayer",
3
3
  "license": "MIT",
4
- "version": "1.0.11",
4
+ "version": "1.0.13",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
7
7
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "devDependencies": {
19
19
  "@anthropic-ai/sdk": "^0.20.8",
20
20
  "@types/node": "^20.8.0",
21
- "openai": "^4.48.1",
21
+ "openai": "^4.67.3",
22
22
  "tsup": "^7.2.0",
23
23
  "typescript": "^5.2.2"
24
24
  },
package/src/index.ts CHANGED
@@ -4,14 +4,16 @@ import { wrapWithSpan } from "@/span-wrapper";
4
4
  import { TemplateManager } from "@/templates";
5
5
  import { getTracer, setupTracing } from "@/tracing";
6
6
  import { TrackManager } from "@/track";
7
- import { GetPromptTemplateParams, LogRequest, RunRequest } from "@/types";
7
+ import { GetPromptTemplateParams, LogRequest, RunRequest, WorkflowRequest, WorkflowResponse } from "@/types";
8
8
  import {
9
9
  anthropicRequest,
10
10
  anthropicStreamCompletion,
11
11
  anthropicStreamMessage,
12
+ azureOpenAIRequest,
12
13
  openaiRequest,
13
14
  openaiStreamChat,
14
15
  openaiStreamCompletion,
16
+ runWorkflowRequest,
15
17
  streamResponse,
16
18
  trackRequest,
17
19
  utilLogRequest,
@@ -39,11 +41,22 @@ const MAP_PROVIDER_TO_FUNCTION_NAME = {
39
41
  stream_function: anthropicStreamCompletion,
40
42
  },
41
43
  },
44
+ "openai.azure": {
45
+ chat: {
46
+ function_name: "openai.AzureOpenAI.chat.completions.create",
47
+ stream_function: openaiStreamChat,
48
+ },
49
+ completion: {
50
+ function_name: "openai.AzureOpenAI.completions.create",
51
+ stream_function: openaiStreamCompletion,
52
+ },
53
+ },
42
54
  };
43
55
 
44
56
  const MAP_PROVIDER_TO_FUNCTION: Record<string, any> = {
45
57
  openai: openaiRequest,
46
58
  anthropic: anthropicRequest,
59
+ "openai.azure": azureOpenAIRequest,
47
60
  };
48
61
 
49
62
  export interface ClientOptions {
@@ -183,7 +196,7 @@ export class PromptLayer {
183
196
  kwargs["baseURL"] = provider_base_url.url;
184
197
  }
185
198
  kwargs["stream"] = stream;
186
- if (stream && provider_type === "openai") {
199
+ if (stream && ["openai", "openai.azure"].includes(provider_type)) {
187
200
  kwargs["stream_options"] = { include_usage: true };
188
201
  }
189
202
 
@@ -235,6 +248,34 @@ export class PromptLayer {
235
248
  });
236
249
  }
237
250
 
251
+ async runWorkflow({
252
+ workflowName,
253
+ inputVariables = {},
254
+ metadata = {},
255
+ workflowLabelName = null,
256
+ workflowVersionNumber = null,
257
+ }: WorkflowRequest): Promise<WorkflowResponse> {
258
+ try {
259
+ const result = await runWorkflowRequest({
260
+ workflow_name: workflowName,
261
+ input_variables: inputVariables,
262
+ metadata,
263
+ workflow_label_name: workflowLabelName,
264
+ workflow_version_number: workflowVersionNumber,
265
+ api_key: this.apiKey,
266
+ });
267
+ return result;
268
+ } catch (error) {
269
+ if (error instanceof Error) {
270
+ console.error("Error running workflow:", error.message);
271
+ throw new Error(`Error running workflow: ${error.message}`);
272
+ } else {
273
+ console.error("Unknown error running workflow:", error);
274
+ throw new Error("Unknown error running workflow");
275
+ }
276
+ }
277
+ }
278
+
238
279
  async logRequest(body: LogRequest) {
239
280
  return utilLogRequest(this.apiKey, body);
240
281
  }
package/src/types.ts CHANGED
@@ -290,3 +290,18 @@ export interface RequestLog {
290
290
  id: number;
291
291
  prompt_version: PromptBlueprint;
292
292
  }
293
+
294
+ export interface WorkflowRequest {
295
+ workflowName: string;
296
+ inputVariables?: Record<string, any>;
297
+ metadata?: Record<string, string>;
298
+ workflowLabelName?: string | null;
299
+ workflowVersionNumber?: number | null;
300
+ }
301
+
302
+ export interface WorkflowResponse {
303
+ success: boolean;
304
+ message?: string;
305
+ error?: string;
306
+ workflow_version_execution_id?: string;
307
+ }
package/src/utils.ts CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  TrackPrompt,
13
13
  TrackRequest,
14
14
  TrackScore,
15
+ WorkflowResponse,
15
16
  } from "@/types";
16
17
  import type TypeAnthropic from "@anthropic-ai/sdk";
17
18
  import {
@@ -258,10 +259,10 @@ const getPromptTemplate = async (
258
259
  );
259
260
  return null;
260
261
  }
261
- if(data.warning){
262
- console.warn(
263
- `WARNING: While tracking your prompt PromptLayer had the following error: ${data.warning}`
264
- );
262
+ if (data.warning) {
263
+ console.warn(
264
+ `WARNING: While tracking your prompt PromptLayer had the following error: ${data.warning}`
265
+ );
265
266
  }
266
267
  return data as Promise<GetPromptTemplateResponse>;
267
268
  } catch (e) {
@@ -339,6 +340,51 @@ const getAllPromptTemplates = async (
339
340
  }
340
341
  };
341
342
 
343
+ export const runWorkflowRequest = async ({
344
+ workflow_name,
345
+ input_variables,
346
+ metadata = {},
347
+ workflow_label_name = null,
348
+ workflow_version_number = null,
349
+ api_key,
350
+ }: {
351
+ workflow_name: string;
352
+ input_variables: Record<string, any>;
353
+ metadata?: Record<string, string>;
354
+ workflow_label_name?: string | null;
355
+ workflow_version_number?: number | null;
356
+ api_key: string;
357
+ }): Promise<WorkflowResponse> => {
358
+ const payload = {
359
+ input_variables,
360
+ metadata,
361
+ workflow_label_name,
362
+ workflow_version_number,
363
+ };
364
+
365
+ try {
366
+ const response = await fetch(`${URL_API_PROMPTLAYER}/workflows/${workflow_name}/run`, {
367
+ method: 'POST',
368
+ headers: {
369
+ 'X-API-KEY': api_key,
370
+ 'Content-Type': 'application/json',
371
+ },
372
+ body: JSON.stringify(payload),
373
+ });
374
+
375
+ if (response.status !== 201) {
376
+ const errorData = await response.json().catch(() => ({}));
377
+ throw new Error(`Failed to run workflow: ${errorData.error || response.statusText}`);
378
+ }
379
+
380
+ const result = await response.json();
381
+ return result;
382
+ } catch (error) {
383
+ console.error(`Failed to run workflow: ${(error as Error).message}`);
384
+ throw error;
385
+ }
386
+ };
387
+
342
388
  const openaiStreamChat = (results: ChatCompletionChunk[]): ChatCompletion => {
343
389
  let content: ChatCompletion.Choice["message"]["content"] = null;
344
390
  let functionCall: ChatCompletion.Choice["message"]["function_call"] =
@@ -393,15 +439,17 @@ const openaiStreamChat = (results: ChatCompletionChunk[]): ChatCompletion => {
393
439
  }`;
394
440
  }
395
441
  }
442
+ const firstChoice = results[0].choices.at(0);
396
443
  response.choices.push({
397
- finish_reason: results[0].choices[0].finish_reason || "stop",
398
- index: results[0].choices[0].index || 0,
399
- logprobs: results[0].choices[0].logprobs || null,
444
+ finish_reason: firstChoice?.finish_reason ?? "stop",
445
+ index: firstChoice?.index ?? 0,
446
+ logprobs: firstChoice?.logprobs ?? null,
400
447
  message: {
401
448
  role: "assistant",
402
449
  content,
403
450
  function_call: functionCall ? functionCall : undefined,
404
451
  tool_calls: toolCalls ? toolCalls : undefined,
452
+ refusal: firstChoice?.delta.refusal ?? null,
405
453
  },
406
454
  });
407
455
  response.id = lastResult.id;
@@ -660,6 +708,19 @@ const openaiRequest = async (
660
708
  return requestToMake(client, kwargs);
661
709
  };
662
710
 
711
+ const azureOpenAIRequest = async (
712
+ promptBlueprint: GetPromptTemplateResponse,
713
+ kwargs: any
714
+ ) => {
715
+ const OpenAI = require("openai").AzureOpenAI;
716
+ const client = new OpenAI({
717
+ baseURL: kwargs.baseURL,
718
+ });
719
+ const requestToMake =
720
+ MAP_TYPE_TO_OPENAI_FUNCTION[promptBlueprint.prompt_template.type];
721
+ return requestToMake(client, kwargs);
722
+ };
723
+
663
724
  const anthropicChatRequest = async (client: TypeAnthropic, kwargs: any) => {
664
725
  return client.messages.create(kwargs);
665
726
  };
@@ -722,6 +783,7 @@ export {
722
783
  anthropicRequest,
723
784
  anthropicStreamCompletion,
724
785
  anthropicStreamMessage,
786
+ azureOpenAIRequest,
725
787
  getAllPromptTemplates,
726
788
  getPromptTemplate,
727
789
  openaiRequest,