promptlayer 1.0.3 → 1.0.5
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 +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.mts +14 -3
- package/dist/index.d.ts +14 -3
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -1
- package/src/index.ts +212 -90
- package/src/promptlayer.ts +56 -24
- package/src/span-exporter.ts +116 -0
- package/src/span-wrapper.ts +33 -0
- package/src/tracing.ts +16 -0
- package/src/types.ts +8 -1
- package/src/utils.ts +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
var le=Object.defineProperty,me=Object.defineProperties;var ue=Object.getOwnPropertyDescriptors;var U=Object.getOwnPropertySymbols;var he=Object.prototype.hasOwnProperty,fe=Object.prototype.propertyIsEnumerable;var D=(r,e)=>{if(e=Symbol[r])return e;throw Error("Symbol."+r+" is not defined")};var Y=(r,e,t)=>e in r?le(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,d=(r,e)=>{for(var t in e||(e={}))he.call(e,t)&&Y(r,t,e[t]);if(U)for(var t of U(e))fe.call(e,t)&&Y(r,t,e[t]);return r},R=(r,e)=>me(r,ue(e));var N=(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=s=>{try{p(t.next(s))}catch(h){n(h)}},i=s=>{try{p(t.throw(s))}catch(h){n(h)}},p=s=>s.done?o(s.value):Promise.resolve(s.value).then(a,i);p((t=t.apply(r,e)).next())}),w=function(r,e){this[0]=r,this[1]=e},W=(r,e,t)=>{var o=(i,p,s,h)=>{try{var m=t[i](p),f=(p=m.value)instanceof w,u=m.done;Promise.resolve(f?p[0]:p).then(l=>f?o(i==="return"?i:"next",p[1]?{done:l.done,value:l.value}:l,s,h):s({value:l,done:u})).catch(l=>o("throw",l,s,h))}catch(l){h(l)}},n=i=>a[i]=p=>new Promise((s,h)=>o(i,p,s,h)),a={};return t=t.apply(r,e),a[Symbol.asyncIterator]=()=>a,n("next"),n("throw"),n("return"),a};var x=(r,e,t)=>(e=r[D("asyncIterator")])?e.call(r):(r=r[D("iterator")](),e={},t=(o,n)=>(n=r[o])&&(e[o]=a=>new Promise((i,p,s)=>(a=n.call(r,a),s=a.done,Promise.resolve(a.value).then(h=>i({value:h,done:s}),p)))),t("next"),t("return"),e);var g="https://api.promptlayer.com",J=(r,e)=>c(void 0,null,function*(){return e.request_response[Symbol.asyncIterator]!==void 0?ye(r,e.request_response,e):yield B(r,e)}),B=(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&&_(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}),F=(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(d({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return _(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}),H=(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(d({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return _(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}),X=(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(d({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return _(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}),V=(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(d({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return _(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}),z=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?(_(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}}),Q=(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?(_(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):a}catch(o){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${o}`),null}}),Z=(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:d({},e),prompt_version:d({},e),release_labels:e.release_labels?e.release_labels:void 0})}),o=yield t.json();return t.status===400&&_(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}`)}}),ee=(r,e)=>c(void 0,null,function*(){var t;try{let o=new URL(`${g}/prompt-templates`);Object.entries(e||{}).forEach(([i,p])=>o.searchParams.append(i,p.toString()));let n=yield fetch(o,{headers:{"Content-Type":"application/json","X-API-KEY":r}}),a=yield n.json();return n.status!==200?(_(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}}),v=r=>{var i,p,s,h,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 f of r){if(f.choices.length===0)continue;let u=f.choices[0].delta;u.content&&(e=`${e||""}${u.content||""}`),u.function_call&&(t={name:`${t?t.name:""}${u.function_call.name||""}`,arguments:`${t?t.arguments:""}${u.function_call.arguments||""}`});let l=(i=u.tool_calls)==null?void 0:i[0];if(l){a=a||[];let y=a.at(-1);if(!y||l.id){a.push({id:l.id||"",type:l.type||"function",function:{name:((p=l.function)==null?void 0:p.name)||"",arguments:((s=l.function)==null?void 0:s.arguments)||""}});continue}y.function.name=`${y.function.name}${((h=l.function)==null?void 0:h.name)||""}`,y.function.arguments=`${y.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},j=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=d({},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},de=(r,e="openai.chat.completions.create")=>{if("completion"in r[0])return r.reduce((t,o)=>R(d({},o),{completion:`${t.completion}${o.completion}`}),{});if(e==="anthropic.messages.create")return j(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=v(r);return t.choices[0]=d(d({},t.choices[0]),t.choices[0].message),t}return""};function ye(r,e,t){return W(this,null,function*(){let o=[];try{for(var i=x(e),p,s,h;p=!(s=yield new w(i.next())).done;p=!1){let m=s.value;yield t.return_pl_id?[m,null]:m,o.push(m)}}catch(s){h=[s]}finally{try{p&&(s=i.return)&&(yield new w(s.call(i)))}finally{if(h)throw h[0]}}let n=de(o,t.function_name),a=yield new w(B(r,R(d({},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 _=(r,e)=>{try{console.warn(`${e}: ${r.message}`)}catch(t){console.warn(`${e}: ${r}`)}},te=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&&_(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{}}),re=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},oe=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 ne(r,e,t){return W(this,null,function*(){let o={request_id:null,raw_response:null,prompt_blueprint:null},n=[];try{for(var p=x(r),s,h,m;s=!(h=yield new w(p.next())).done;s=!1){let f=h.value;n.push(f),o.raw_response=f,yield o}}catch(h){m=[h]}finally{try{s&&(h=p.return)&&(yield new w(h.call(p)))}finally{if(m)throw m[0]}}let a=t(n),i=yield new w(e({request_response:a}));o.request_id=i.request_id,o.prompt_blueprint=i.prompt_blueprint,yield o})}var ge=(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)}),Pe={chat:ge,completion:_e},ae=(r,e)=>c(void 0,null,function*(){let t=N("openai").default,o=new t({baseURL:e.baseURL}),n=Pe[r.prompt_template.type];return n(o,e)}),we=(r,e)=>c(void 0,null,function*(){return r.messages.create(e)}),Te=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),Re={chat:we,completion:Te},se=(r,e)=>c(void 0,null,function*(){let t=N("@anthropic-ai/sdk").default,o=new t({baseURL:e.baseURL}),n=Re[r.prompt_template.type];return n(o,e)});var I=class{constructor(e){this.create=()=>z(this.apiKey);this.apiKey=e}};var M=(r,e,t="",o="openai")=>{let n={construct:(a,i)=>{let p=Reflect.construct(a,i);return Object.defineProperties(p,{function_name:{value:t,writable:!0},provider:{value:o}}),new Proxy(p,n)},get:(a,i,p)=>{let s=a[i],h=`${Reflect.get(a,"function_name")}.${i.toString()}`;return typeof s=="object"?(Object.defineProperties(s,{function_name:{value:h,writable:!0},provider:{value:o}}),new Proxy(s,n)):typeof s=="function"?(...m)=>{var T,A,P,b;let f=new Date().toISOString(),u=Reflect.get(a,"provider"),l=(T=m[0])==null?void 0:T.return_pl_id,y=(A=m[0])==null?void 0:A.pl_tags;(P=m[0])==null||delete P.return_pl_id,(b=m[0])==null||delete b.pl_tags;let k=Reflect.apply(s,a,m);return k instanceof Promise?new Promise(($,L)=>{k.then(q=>c(void 0,null,function*(){let C=yield J(r,{api_key:r,provider_type:u,function_name:h,request_start_time:f,request_end_time:new Date().toISOString(),request_response:q,kwargs:m[0],return_pl_id:l,tags:y});$(C)})).catch(q=>{L(q)})}):k}:Reflect.get(a,i,p)}};return new Proxy(e,n)};var O=class{constructor(e){this.get=(e,t)=>Q(this.apiKey,e,t);this.publish=e=>Z(this.apiKey,e);this.all=e=>ee(this.apiKey,e);this.apiKey=e}};var ke=(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 F(r,e)},be=(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 H(r,e)},qe=(r,e)=>{if(!(e.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return X(r,e)},Ae=(r,e)=>V(r,e),S=class{constructor(e){this.group=e=>Ae(this.apiKey,e);this.metadata=e=>ke(this.apiKey,e);this.prompt=e=>qe(this.apiKey,e);this.score=e=>be(this.apiKey,e);this.apiKey=e}};var Ce={openai:{chat:{function_name:"openai.chat.completions.create",stream_function:v},completion:{function_name:"openai.completions.create",stream_function:re}},anthropic:{chat:{function_name:"anthropic.messages.create",stream_function:j},completion:{function_name:"anthropic.completions.create",stream_function:oe}}},Ne={openai:ae,anthropic:se},ie=class{constructor({apiKey:e=process.env.PROMPTLAYER_API_KEY}={}){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.templates=new O(e),this.group=new I(e),this.track=new S(e)}get OpenAI(){try{let e=N("openai").default;return M(this.apiKey,e,"openai","openai")}catch(e){console.error("To use the OpenAI module, you must install the @openai/api package.")}}get Anthropic(){try{let e=N("@anthropic-ai/sdk").default;return M(this.apiKey,e,"anthropic","anthropic")}catch(e){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}run(h){return c(this,arguments,function*({promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:i,groupId:p,stream:s=!1}){let m=n,f={label:o,version:t,metadata_filters:i};n&&(f.input_variables=n);let u=yield this.templates.get(e,f);if(!u)throw new Error("Prompt not found");let l=u.prompt_template;if(!u.llm_kwargs)throw new Error(`Prompt '${e}' does not have any LLM kwargs associated with it.`);let y=u.metadata;if(!y)throw new Error(`Prompt '${e}' does not have any metadata associated with it.`);let k=y.model;if(!k)throw new Error(`Prompt '${e}' does not have a model parameters associated with it.`);let T=k.provider,A=new Date().toISOString(),P=u.llm_kwargs,b=Ce[T][l.type],$=b.function_name,L=b.stream_function,q=Ne[T],C=u.provider_base_url;C&&(P.baseURL=C.url),P.stream=s,s&&T==="openai"&&(P.stream_options={include_usage:!0});let G=yield q(u,P),E=pe=>{let ce=new Date().toISOString();return te(d({function_name:$,provider_type:T,args:[],kwargs:P,tags:a,request_start_time:A,request_end_time:ce,api_key:this.apiKey,metadata:i,prompt_id:u.id,prompt_version:u.version,prompt_input_variables:m,group_id:p,return_prompt_blueprint:!0},pe))};if(s)return ne(G,E,L);let K=yield E({request_response:G});return{request_id:K.request_id,raw_response:G,prompt_blueprint:K.prompt_blueprint}})}};export{ie as PromptLayer};
|
|
1
|
+
var kt=Object.defineProperty,It=Object.defineProperties;var Et=Object.getOwnPropertyDescriptors;var at=Object.getOwnPropertySymbols;var qt=Object.prototype.hasOwnProperty,Lt=Object.prototype.propertyIsEnumerable;var st=(r,t)=>{if(t=Symbol[r])return t;throw Error("Symbol."+r+" is not defined")};var it=(r,t,e)=>t in r?kt(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,g=(r,t)=>{for(var e in t||(t={}))qt.call(t,e)&&it(r,e,t[e]);if(at)for(var e of at(t))Lt.call(t,e)&&it(r,e,t[e]);return r},b=(r,t)=>It(r,Et(t));var W=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(t,e)=>(typeof require!="undefined"?require:t)[e]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var c=(r,t,e)=>new Promise((o,n)=>{var a=i=>{try{p(e.next(i))}catch(f){n(f)}},s=i=>{try{p(e.throw(i))}catch(f){n(f)}},p=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,s);p((e=e.apply(r,t)).next())}),O=function(r,t){this[0]=r,this[1]=t},D=(r,t,e)=>{var o=(s,p,i,f)=>{try{var u=e[s](p),y=(p=u.value)instanceof O,h=u.done;Promise.resolve(y?p[0]:p).then(l=>y?o(s==="return"?s:"next",p[1]?{done:l.done,value:l.value}:l,i,f):i({value:l,done:h})).catch(l=>o("throw",l,i,f))}catch(l){f(l)}},n=s=>a[s]=p=>new Promise((i,f)=>o(s,p,i,f)),a={};return e=e.apply(r,t),a[Symbol.asyncIterator]=()=>a,n("next"),n("throw"),n("return"),a};var Y=(r,t,e)=>(t=r[st("asyncIterator")])?t.call(r):(r=r[st("iterator")](),t={},e=(o,n)=>(n=r[o])&&(t[o]=a=>new Promise((s,p,i)=>(a=n.call(r,a),i=a.done,Promise.resolve(a.value).then(f=>s({value:f,done:i}),p)))),e("next"),e("return"),t);import*as C from"@opentelemetry/api";var w=process.env.URL_API_PROMPTLAYER||"https://api.promptlayer.com",ct=(r,t)=>c(void 0,null,function*(){return t.request_response[Symbol.asyncIterator]!==void 0?vt(r,t.request_response,t):yield pt(r,t)}),pt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),o=yield e.json();if(e.status!==200&&S(o,"WARNING: While logging your request, PromptLayer experienced the following error:"),o&&t.return_pl_id)return[t.request_response,o.request_id]}catch(e){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${e}`)}return t.request_response}),ut=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/library-track-metadata`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b(g({},t),{api_key:r}))}),o=yield e.json();if(e.status!==200)return S(o,"WARNING: While logging metadata to your request, PromptLayer experienced the following error"),!1}catch(e){return console.warn(`WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${e}`),!1}return!0}),lt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/library-track-score`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b(g({},t),{api_key:r}))}),o=yield e.json();if(e.status!==200)return S(o,"WARNING: While scoring your request, PromptLayer experienced the following error"),!1}catch(e){return console.warn(`WARNING: While scoring your request, PromptLayer experienced the following error: ${e}`),!1}return!0}),mt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/library-track-prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b(g({},t),{api_key:r}))}),o=yield e.json();if(e.status!==200)return S(o,"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error"),!1}catch(e){return console.warn(`WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${e}`),!1}return!0}),dt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/track-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b(g({},t),{api_key:r}))}),o=yield e.json();if(e.status!==200)return S(o,"WARNING: While associating your request with a group, PromptLayer experienced the following error"),!1}catch(e){return console.warn(`WARNING: While associating your request with a group, PromptLayer experienced the following error: ${e}`),!1}return!0}),ft=r=>c(void 0,null,function*(){try{let t=yield fetch(`${w}/create-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r})}),e=yield t.json();return t.status!==200?(S(e,"WARNING: While creating a group PromptLayer had the following error"),!1):e.id}catch(t){return console.warn(`WARNING: While creating a group PromptLayer had the following error: ${t}`),!1}}),ht=(r,t,e)=>c(void 0,null,function*(){try{let o=new URL(`${w}/prompt-templates/${t}`),n=yield fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify(e)}),a=yield n.json();return n.status!==200?(S(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):a}catch(o){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${o}`),null}}),yt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/rest/prompt-templates`,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify({prompt_template:g({},t),prompt_version:g({},t),release_labels:t.release_labels?t.release_labels:void 0})}),o=yield e.json();return e.status===400&&S(o,"WARNING: While publishing a prompt template PromptLayer had the following error"),o}catch(e){console.warn(`WARNING: While publishing a prompt template PromptLayer had the following error: ${e}`)}}),gt=(r,t)=>c(void 0,null,function*(){var e;try{let o=new URL(`${w}/prompt-templates`);Object.entries(t||{}).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?(S(a,"WARNING: While fetching all prompt templates PromptLayer had the following error"),null):(e=a.items)!=null?e:[]}catch(o){return console.warn(`WARNING: While fetching all prompt templates PromptLayer had the following error: ${o}`),null}}),B=r=>{var s,p,i,f,u;let t=null,e,o={id:"",choices:[],created:Date.now(),model:"",object:"chat.completion"},n=r.at(-1);if(!n)return o;let a;for(let y of r){if(y.choices.length===0)continue;let h=y.choices[0].delta;h.content&&(t=`${t||""}${h.content||""}`),h.function_call&&(e={name:`${e?e.name:""}${h.function_call.name||""}`,arguments:`${e?e.arguments:""}${h.function_call.arguments||""}`});let l=(s=h.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}${((f=l.function)==null?void 0:f.name)||""}`,T.function.arguments=`${T.function.arguments}${((u=l.function)==null?void 0:u.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:t,function_call:e||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},F=r=>{let t={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 t;let o="";for(let n of r)switch(n.type){case"message_start":{t=g({},n.message);break}case"content_block_delta":n.delta.type==="text_delta"&&(o=`${o}${n.delta.text}`);case"message_delta":"usage"in n&&(t.usage.output_tokens=n.usage.output_tokens),"stop_reason"in n.delta&&(t.stop_reason=n.delta.stop_reason);default:break}return t.content.push({type:"text",text:o}),t},xt=(r,t="openai.chat.completions.create")=>{if("completion"in r[0])return r.reduce((e,o)=>b(g({},o),{completion:`${e.completion}${o.completion}`}),{});if(t==="anthropic.messages.create")return F(r);if("text"in r[0].choices[0]){let e="";for(let n of r)e=`${e}${n.choices[0].text}`;let o=structuredClone(r.at(-1));return o.choices[0].text=e,o}if("delta"in r[0].choices[0]){let e=B(r);return e.choices[0]=g(g({},e.choices[0]),e.choices[0].message),e}return""};function vt(r,t,e){return D(this,null,function*(){let o=[];try{for(var s=Y(t),p,i,f;p=!(i=yield new O(s.next())).done;p=!1){let u=i.value;yield e.return_pl_id?[u,null]:u,o.push(u)}}catch(i){f=[i]}finally{try{p&&(i=s.return)&&(yield new O(i.call(s)))}finally{if(f)throw f[0]}}let n=xt(o,e.function_name),a=yield new O(pt(r,b(g({},e),{request_response:n,request_end_time:new Date().toISOString()})));if(a&&e.return_pl_id){let u=a[1];yield[o.at(-1),u]}})}var S=(r,t)=>{try{console.warn(`${t}: ${r.message}`)}catch(e){console.warn(`${t}: ${r}`)}},_t=r=>c(void 0,null,function*(){try{let t=yield fetch(`${w}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return t.status!==200&&S(t,"WARNING: While logging your request, PromptLayer experienced the following error:"),t.json()}catch(t){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${t}`)}return{}}),Pt=r=>{let t={id:"",choices:[{finish_reason:"stop",index:0,text:"",logprobs:null}],created:Date.now(),model:"",object:"text_completion"},e=r.at(-1);if(!e)return t;let o="";for(let n of r)n.choices.length>0&&n.choices[0].text&&(o=`${o}${n.choices[0].text}`);return t.choices[0].text=o,t.id=e.id,t.created=e.created,t.model=e.model,t.system_fingerprint=e.system_fingerprint,t.usage=e.usage,t},wt=r=>{let t={completion:"",id:"",model:"",stop_reason:"",type:"completion"},e=r.at(-1);if(!e)return t;let o="";for(let n of r)o=`${o}${n.completion}`;return t.completion=o,t.id=e.id,t.model=e.model,t.stop_reason=e.stop_reason,t};function Tt(r,t,e){return D(this,null,function*(){let o={request_id:null,raw_response:null,prompt_blueprint:null},n=[];try{for(var p=Y(r),i,f,u;i=!(f=yield new O(p.next())).done;i=!1){let y=f.value;n.push(y),o.raw_response=y,yield o}}catch(f){u=[f]}finally{try{i&&(f=p.return)&&(yield new O(f.call(p)))}finally{if(u)throw u[0]}}let a=e(n),s=yield new O(t({request_response:a}));o.request_id=s.request_id,o.prompt_blueprint=s.prompt_blueprint,yield o})}var $t=(r,t)=>c(void 0,null,function*(){return r.chat.completions.create(t)}),Wt=(r,t)=>c(void 0,null,function*(){return r.completions.create(t)}),Gt={chat:$t,completion:Wt},St=(r,t)=>c(void 0,null,function*(){let e=W("openai").default,o=new e({baseURL:t.baseURL}),n=Gt[r.prompt_template.type];return n(o,t)}),Kt=(r,t)=>c(void 0,null,function*(){return r.messages.create(t)}),jt=(r,t)=>c(void 0,null,function*(){return r.completions.create(t)}),Mt={chat:Kt,completion:jt},Rt=(r,t)=>c(void 0,null,function*(){let e=W("@anthropic-ai/sdk").default,o=new e({baseURL:t.baseURL}),n=Mt[r.prompt_template.type];return n(o,t)});var G=class{constructor(t){this.create=()=>ft(this.apiKey);this.apiKey=t}};import*as At from"@opentelemetry/api";import{SimpleSpanProcessor as Ut}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Jt}from"@opentelemetry/sdk-trace-node";import{SpanKind as L,SpanStatusCode as H}from"@opentelemetry/api";import{ExportResultCode as K}from"@opentelemetry/core";var X=class{constructor(t,e){this.apiKey=process.env.PROMPTLAYER_API_KEY,this.enableTracing=t,this.url=`${w}/spans-bulk`,this.workspaceId=e}attributesToObject(t){return t?Object.fromEntries(Object.entries(t)):{}}spanKindToString(t){return{[L.INTERNAL]:"SpanKind.INTERNAL",[L.SERVER]:"SpanKind.SERVER",[L.CLIENT]:"SpanKind.CLIENT",[L.PRODUCER]:"SpanKind.PRODUCER",[L.CONSUMER]:"SpanKind.CONSUMER"}[t]||"SpanKind.INTERNAL"}statusCodeToString(t){return{[H.ERROR]:"StatusCode.ERROR",[H.OK]:"StatusCode.OK",[H.UNSET]:"StatusCode.UNSET"}[t]||"StatusCode.UNSET"}toNanoseconds(t){return(BigInt(t[0])*BigInt(1e9)+BigInt(t[1])).toString()}export(t){if(!this.enableTracing)return Promise.resolve(K.SUCCESS);let e=t.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(g({},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:e,workspace_id:this.workspaceId})}).then(o=>o.ok?K.SUCCESS:(console.error(`Error exporting spans
|
|
2
|
+
HTTP error! status: ${o.status}`),K.FAILED)).catch(o=>(console.error("Error exporting spans:",o),K.FAILED))}shutdown(){return Promise.resolve()}},bt=X;var k=(r="promptlayer-tracer")=>At.trace.getTracer(r),Ot=(r,t)=>{let e=new Jt,o=new bt(r,t),n=new Ut(o);e.addSpanProcessor(n),e.register()};var Dt=k(),z=(r,t,e="",o="openai")=>{let n={construct:(a,s)=>{let p=Reflect.construct(a,s);return Object.defineProperties(p,{function_name:{value:e,writable:!0},provider:{value:o}}),new Proxy(p,n)},get:(a,s,p)=>{let i=a[s],f=`${Reflect.get(a,"function_name")}.${s.toString()}`;return typeof i=="object"?(Object.defineProperties(i,{function_name:{value:f,writable:!0},provider:{value:o}}),new Proxy(i,n)):typeof i=="function"?(...u)=>{var P,x,I,E;let y=new Date().toISOString(),h=Reflect.get(a,"provider"),l=(P=u[0])==null?void 0:P.return_pl_id,T=(x=u[0])==null?void 0:x.pl_tags;return(I=u[0])==null||delete I.return_pl_id,(E=u[0])==null||delete E.pl_tags,Dt.startActiveSpan(`${h}.${f}`,m=>c(void 0,null,function*(){try{m.setAttribute("function_input",JSON.stringify(u));let R=Reflect.apply(i,a,u),A=m.spanContext().spanId;return R instanceof Promise?new Promise((v,U)=>{R.then(N=>c(void 0,null,function*(){let $=yield ct(r,{api_key:r,provider_type:h,function_name:f,request_start_time:y,request_end_time:new Date().toISOString(),request_response:N,kwargs:u[0],return_pl_id:l,tags:T,span_id:A});m.setAttribute("function_output",JSON.stringify($)),m.setAttribute("response_status","success"),m.end(),v($)})).catch(N=>{m.recordException(N),m.setAttribute("response_status","error"),m.end(),U(N)})}):(m.setAttribute("function_output",JSON.stringify(R)),m.setAttribute("response_status","success"),m.end(),R)}catch(R){throw m.recordException(R),m.setAttribute("response_status","error"),m.end(),R}}))}:Reflect.get(a,s,p)}};return new Proxy(t,n)};import*as V from"@opentelemetry/api";var Ct=(r,t,e)=>function(...o){return c(this,null,function*(){return k().startActiveSpan(r,a=>c(this,null,function*(){try{e&&Object.entries(e).forEach(([p,i])=>{a.setAttribute(p,i)}),a.setAttribute("function_input",JSON.stringify(o));let s=yield t(...o);return a.setAttribute("function_output",JSON.stringify(s)),a.setStatus({code:V.SpanStatusCode.OK}),s}catch(s){throw a.setAttribute("function_input",JSON.stringify(o)),a.setStatus({code:V.SpanStatusCode.ERROR,message:s instanceof Error?s.message:"Unknown error"}),s}finally{a.end()}}))})};var j=class{constructor(t){this.get=(t,e)=>ht(this.apiKey,t,e);this.publish=t=>yt(this.apiKey,t);this.all=t=>gt(this.apiKey,t);this.apiKey=t}};var Yt=(r,t)=>{if(!(t.metadata instanceof Object))throw new Error("Please provide a dictionary of metadata.");for(let[e,o]of Object.entries(t.metadata))if(typeof e!="string"||typeof o!="string")throw new Error("Please provide a dictionary of metadata with key value pair of strings.");return ut(r,t)},Bt=(r,t)=>{if(typeof t.score!="number")throw new Error("Score must be a number");if(t.score<0||t.score>100)throw new Error("Score must be a number between 0 and 100.");return lt(r,t)},Ft=(r,t)=>{if(!(t.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return mt(r,t)},Ht=(r,t)=>dt(r,t),M=class{constructor(t){this.group=t=>Ht(this.apiKey,t);this.metadata=t=>Yt(this.apiKey,t);this.prompt=t=>Ft(this.apiKey,t);this.score=t=>Bt(this.apiKey,t);this.apiKey=t}};var Xt={openai:{chat:{function_name:"openai.chat.completions.create",stream_function:B},completion:{function_name:"openai.completions.create",stream_function:Pt}},anthropic:{chat:{function_name:"anthropic.messages.create",stream_function:F},completion:{function_name:"anthropic.completions.create",stream_function:wt}}},zt={openai:St,anthropic:Rt},Nt=class{constructor({apiKey:t=process.env.PROMPTLAYER_API_KEY,enableTracing:e=!1,workspaceId:o}={}){if(t===void 0)throw new Error("PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.");if(e&&o===void 0)throw new Error("Please set a workspaceId to enable tracing.");this.apiKey=t,this.enableTracing=e,this.templates=new j(t),this.group=new G(t),this.track=new M(t),this.workspaceId=o,this.wrapWithSpan=Ct,e&&o&&Ot(e,o)}get Anthropic(){try{let t=W("@anthropic-ai/sdk").default;return z(this.apiKey,t,"anthropic","anthropic")}catch(t){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}get OpenAI(){try{let t=W("openai").default;return z(this.apiKey,t,"openai","openai")}catch(t){console.error("To use the OpenAI module, you must install the @openai/api package.")}}run(f){return c(this,arguments,function*({promptName:t,promptVersion:e,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i=!1}){let u=k();return u.startActiveSpan("PromptLayer.run",y=>c(this,null,function*(){try{let h={promptName:t,promptVersion:e,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i};y.setAttribute("function_input",JSON.stringify(h));let l=n,T={label:o,version:e,metadata_filters:s};n&&(T.input_variables=n);let P=yield u.startActiveSpan("PromptLayer.templates.get",_=>c(this,null,function*(){try{_.setAttribute("function_input",JSON.stringify({promptName:t,templateGetParams:T}));let d=yield this.templates.get(t,T);return _.setAttribute("function_output",JSON.stringify(d)),_.setStatus({code:C.SpanStatusCode.OK}),d}catch(d){throw _.setStatus({code:C.SpanStatusCode.ERROR,message:d instanceof Error?d.message:"Unknown error"}),d}finally{_.end()}}));if(!P)throw new Error("Prompt not found");let x=P.prompt_template;if(!P.llm_kwargs)throw new Error(`Prompt '${t}' does not have any LLM kwargs associated with it.`);let I=P.metadata;if(!I)throw new Error(`Prompt '${t}' does not have any metadata associated with it.`);let E=I.model;if(!E)throw new Error(`Prompt '${t}' does not have a model parameters associated with it.`);let m=E.provider,R=new Date().toISOString(),A=P.llm_kwargs,v=Xt[m][x.type],U=v.function_name,N=v.stream_function,$=zt[m],Q=P.provider_base_url;Q&&(A.baseURL=Q.url),A.stream=i,i&&m==="openai"&&(A.stream_options={include_usage:!0});let Z,J=yield u.startActiveSpan(`${m}.request`,_=>c(this,null,function*(){Z=_.spanContext().spanId;try{_.setAttribute("function_input",JSON.stringify({promptBlueprint:P,kwargs:A}));let d=yield $(P,A);return _.setAttribute("function_output",JSON.stringify(d)),_.setStatus({code:C.SpanStatusCode.OK}),d}catch(d){throw _.setStatus({code:C.SpanStatusCode.ERROR,message:d instanceof Error?d.message:"Unknown error"}),d}finally{_.end()}})),tt=_=>u.startActiveSpan("PromptLayer._trackRequest",d=>c(this,null,function*(){try{let q=new Date().toISOString(),ot=g({function_name:U,provider_type:m,args:[],kwargs:A,tags:a,request_start_time:R,request_end_time:q,api_key:this.apiKey,metadata:s,prompt_id:P.id,prompt_version:P.version,prompt_input_variables:l,group_id:p,return_prompt_blueprint:!0,span_id:Z},_);d.setAttribute("function_input",JSON.stringify(ot));let nt=yield _t(ot);return d.setAttribute("function_output",JSON.stringify(nt)),d.setStatus({code:C.SpanStatusCode.OK}),nt}catch(q){throw d.setStatus({code:C.SpanStatusCode.ERROR,message:q instanceof Error?q.message:"Unknown error"}),q}finally{d.end()}}));if(i)return Tt(J,tt,N);let et=yield tt({request_response:J}),rt={request_id:et.request_id,raw_response:J,prompt_blueprint:et.prompt_blueprint};return y.setAttribute("function_output",JSON.stringify(rt)),rt}catch(h){throw y.setStatus({code:C.SpanStatusCode.ERROR,message:h instanceof Error?h.message:"Unknown error"}),h}finally{y.end()}}))})}};export{Nt as PromptLayer};
|
|
2
3
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils.ts","../../src/groups.ts","../../src/promptlayer.ts","../../src/templates.ts","../../src/track.ts","../../src/index.ts"],"sourcesContent":["import {\n GetPromptTemplateParams,\n GetPromptTemplateResponse,\n ListPromptTemplatesResponse,\n Pagination,\n PublishPromptTemplate,\n PublishPromptTemplateResponse,\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\nconst 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 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\nexport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n getAllPromptTemplates,\n getPromptTemplate,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n promptLayerApiRequest,\n promptLayerCreateGroup,\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n promptlayerApiHandler,\n publishPromptTemplate,\n streamResponse,\n trackRequest,\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 { promptlayerApiHandler } from \"@/utils\";\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 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 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 const response = Reflect.apply(value, target, args);\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 });\n resolve(response);\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n return response;\n };\n }\n return Reflect.get(target, prop, receiver);\n },\n };\n return new Proxy(llm, handler);\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 { TemplateManager } from \"@/templates\";\nimport { TrackManager } from \"@/track\";\nimport { GetPromptTemplateParams, RunRequest } from \"@/types\";\nimport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n streamResponse,\n trackRequest,\n} from \"@/utils\";\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}\n\nexport class PromptLayer {\n apiKey: string;\n templates: TemplateManager;\n group: GroupManager;\n track: TrackManager;\n\n constructor({\n apiKey = process.env.PROMPTLAYER_API_KEY,\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 this.apiKey = apiKey;\n this.templates = new TemplateManager(apiKey);\n this.group = new GroupManager(apiKey);\n this.track = new TrackManager(apiKey);\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 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 async run({\n promptName,\n promptVersion,\n promptReleaseLabel,\n inputVariables,\n tags,\n metadata,\n groupId,\n stream = false,\n }: RunRequest) {\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 const promptBlueprint = await this.templates.get(\n promptName,\n templateGetParams\n );\n if (!promptBlueprint) throw new Error(\"Prompt not found\");\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 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 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 const provider_type = promptBlueprintModel.provider;\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 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 const response = await request_function(promptBlueprint, kwargs);\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 ...body,\n });\n };\n if (stream) return streamResponse(response, _trackRequest, stream_function);\n const requestLog = await _trackRequest({ request_response: response });\n const data = {\n request_id: requestLog.request_id,\n raw_response: response,\n prompt_blueprint: requestLog.prompt_blueprint,\n };\n return data;\n }\n}\n"],"mappings":"moDA0BA,IAAMA,EAAsB,8BAEtBC,EAAwB,CAC5BC,EACAC,IAGGC,EAAA,wBAEH,OADoBD,EAAK,iBAAiB,OAAO,aAAa,IAAM,OAE3DE,GAAeH,EAAQC,EAAK,iBAAkBA,CAAI,EAEpD,MAAMG,EAAsBJ,EAAQC,CAAI,CACjD,GAEMG,EAAwB,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,EAA2B,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,EAAwB,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,EAAyB,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,EAAwB,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,EACJf,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,EAAoB,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,MAEFA,CACT,OAASE,EAAG,CACV,eAAQ,KACN,kFAAkFA,CAAC,EACrF,EACO,IACT,CACF,GAEMY,EAAwB,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,wBAhTL,IAAAoB,EAiTE,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,GAEMiB,EAAoBC,GAAmD,CA7U7E,IAAAJ,EAAAK,EAAAC,EAAAC,EAAAC,EA8UE,IAAIC,EAAuD,KACvDC,EAEE3B,EAA2B,CAC/B,GAAI,GACJ,QAAS,CAAC,EACV,QAAS,KAAK,IAAI,EAClB,MAAO,GACP,OAAQ,iBACV,EACM4B,EAAaP,EAAQ,GAAG,EAAE,EAChC,GAAI,CAACO,EAAY,OAAO5B,EACxB,IAAI6B,EACJ,QAAWC,KAAUT,EAAS,CAC5B,GAAIS,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,GAAWf,EAAAc,EAAM,aAAN,YAAAd,EAAmB,GACpC,GAAIe,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,OAAMV,EAAAU,EAAS,WAAT,YAAAV,EAAmB,OAAQ,GACjC,YAAWC,EAAAS,EAAS,WAAT,YAAAT,EAAmB,YAAa,EAC7C,CACF,CAAC,EACD,QACF,CACAU,EAAa,SAAS,KAAO,GAAGA,EAAa,SAAS,IAAI,KACxDT,EAAAQ,EAAS,WAAT,YAAAR,EAAmB,OAAQ,EAC7B,GACAS,EAAa,SAAS,UAAY,GAAGA,EAAa,SAAS,SAAS,KAClER,EAAAO,EAAS,WAAT,YAAAP,EAAmB,YAAa,EAClC,EACF,CACF,CACA,OAAAzB,EAAS,QAAQ,KAAK,CACpB,cAAeqB,EAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,eAAiB,OACtD,MAAOA,EAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAS,EACtC,SAAUA,EAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,UAAY,KAC5C,QAAS,CACP,KAAM,YACN,QAAAK,EACA,cAAeC,GAA8B,OAC7C,WAAYE,GAAwB,MACtC,CACF,CAAC,EACD7B,EAAS,GAAK4B,EAAW,GACzB5B,EAAS,MAAQ4B,EAAW,MAC5B5B,EAAS,QAAU4B,EAAW,QAC9B5B,EAAS,mBAAqB4B,EAAW,mBACzC5B,EAAS,MAAQ4B,EAAW,MACrB5B,CACT,EAEMkC,EAA0Bb,GAA2C,CACzE,IAAIrB,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,CADeqB,EAAQ,GAAG,EAAE,EACf,OAAOrB,EACxB,IAAI0B,EAAU,GACd,QAAWI,KAAUT,EACnB,OAAQS,EAAO,KAAM,CACnB,IAAK,gBAAiB,CACpB9B,EAAWM,EAAA,GACNwB,EAAO,SAEZ,KACF,CACA,IAAK,sBACCA,EAAO,MAAM,OAAS,eACxBJ,EAAU,GAAGA,CAAO,GAAGI,EAAO,MAAM,IAAI,IAE5C,IAAK,gBACC,UAAWA,IACb9B,EAAS,MAAM,cAAgB8B,EAAO,MAAM,eAC1C,gBAAiBA,EAAO,QAC1B9B,EAAS,YAAc8B,EAAO,MAAM,aAExC,QACE,KAEJ,CAEF,OAAA9B,EAAS,QAAQ,KAAK,CACpB,KAAM,OACN,KAAM0B,CACR,CAAC,EACM1B,CACT,EAEMmC,GAAiB,CACrBd,EACAe,EAAgB,mCACb,CACH,GAAI,eAAgBf,EAAQ,CAAC,EAC3B,OAAOA,EAAQ,OACb,CAACgB,EAAMC,IAAajC,EAAAC,EAAA,GACfgC,GADe,CAElB,WAAY,GAAGD,EAAK,UAAU,GAAGC,EAAQ,UAAU,EACrD,GACA,CAAC,CACH,EAGF,GAAIF,IAAkB,4BACpB,OAAOF,EAAuBb,CAAO,EAEvC,GAAI,SAAUA,EAAQ,CAAC,EAAE,QAAQ,CAAC,EAAG,CACnC,IAAIrB,EAAW,GACf,QAAW8B,KAAUT,EACnBrB,EAAW,GAAGA,CAAQ,GAAG8B,EAAO,QAAQ,CAAC,EAAE,IAAI,GAEjD,IAAMS,EAAe,gBAAgBlB,EAAQ,GAAG,EAAE,CAAC,EACnD,OAAAkB,EAAa,QAAQ,CAAC,EAAE,KAAOvC,EACxBuC,CACT,CAEA,GAAI,UAAWlB,EAAQ,CAAC,EAAE,QAAQ,CAAC,EAAG,CACpC,IAAMrB,EAAWoB,EAAiBC,CAAO,EACzC,OAAArB,EAAS,QAAQ,CAAC,EAAIM,IAAA,GACjBN,EAAS,QAAQ,CAAC,GAClBA,EAAS,QAAQ,CAAC,EAAE,SAElBA,CACT,CAEA,MAAO,EACT,EAEA,SAAgBF,GACdH,EACA6C,EACA5C,EACA,QAAA6C,EAAA,sBACA,IAAMpB,EAAU,CAAC,EACjB,YAAAqB,EAAAC,EAA0BH,GAA1BI,EAAAC,EAAAC,EAAAF,EAAA,EAAAC,EAAA,UAAAE,EAAAL,EAAA,cAAAE,EAAA,GACE,CADS,IAAMzB,EAAjB0B,EAAA,MACE,MAAMjD,EAAK,aAAe,CAACuB,EAAO,IAAI,EAAIA,EAC1CE,EAAQ,KAAKF,CAAK,SAFpB0B,EAlfF,CAkfEC,EAAA,CAAAD,UAAA,KAAAD,IAAAC,EAAAH,EAAA,oBAAAK,EAAAF,EAAA,KAAAH,YAAA,IAAAI,EAAA,MAAAA,EAAA,IAIA,IAAME,EAAmBb,GAAed,EAASzB,EAAK,aAAa,EAC7DI,EAAW,UAAA+C,EAAMhD,EAAsBJ,EAAQU,EAAAC,EAAA,GAChDV,GADgD,CAEnD,iBAAAoD,EACA,iBAAkB,IAAI,KAAK,EAAE,YAAY,CAC3C,EAAC,GACD,GAAIhD,GACEJ,EAAK,aAAc,CACrB,IAAMqD,EAAcjD,EAAiB,CAAC,EAEtC,KAAM,CADaqB,EAAQ,GAAG,EAAE,EACb4B,CAAU,CAC/B,CAEJ,GAEA,IAAM/C,EAAoB,CAAC8C,EAAuBE,IAAyB,CACzE,GAAI,CACF,QAAQ,KAAK,GAAGA,CAAY,KAAKF,EAAiB,OAAO,EAAE,CAC7D,OAAS7C,EAAG,CACV,QAAQ,KAAK,GAAG+C,CAAY,KAAKF,CAAgB,EAAE,CACrD,CACF,EAEMG,GAAsBvD,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,GAEMoD,GAA0B/B,GAA0B,CACxD,IAAMrB,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,EACM4B,EAAaP,EAAQ,GAAG,EAAE,EAChC,GAAI,CAACO,EAAY,OAAO5B,EACxB,IAAIqD,EAAO,GACX,QAAWvB,KAAUT,EACfS,EAAO,QAAQ,OAAS,GAAKA,EAAO,QAAQ,CAAC,EAAE,OACjDuB,EAAO,GAAGA,CAAI,GAAGvB,EAAO,QAAQ,CAAC,EAAE,IAAI,IAG3C,OAAA9B,EAAS,QAAQ,CAAC,EAAE,KAAOqD,EAC3BrD,EAAS,GAAK4B,EAAW,GACzB5B,EAAS,QAAU4B,EAAW,QAC9B5B,EAAS,MAAQ4B,EAAW,MAC5B5B,EAAS,mBAAqB4B,EAAW,mBACzC5B,EAAS,MAAQ4B,EAAW,MACrB5B,CACT,EAEMsD,GAA6BjC,GAAmC,CACpE,IAAMrB,EAAgC,CACpC,WAAY,GACZ,GAAI,GACJ,MAAO,GACP,YAAa,GACb,KAAM,YACR,EACM4B,EAAaP,EAAQ,GAAG,EAAE,EAChC,GAAI,CAACO,EAAY,OAAO5B,EACxB,IAAIuD,EAAa,GACjB,QAAWzB,KAAUT,EACnBkC,EAAa,GAAGA,CAAU,GAAGzB,EAAO,UAAU,GAEhD,OAAA9B,EAAS,WAAauD,EACtBvD,EAAS,GAAK4B,EAAW,GACzB5B,EAAS,MAAQ4B,EAAW,MAC5B5B,EAAS,YAAc4B,EAAW,YAC3B5B,CACT,EAEA,SAAgBwD,GACdhB,EACAiB,EACAC,EACA,QAAAjB,EAAA,sBACA,IAAMxC,EAIF,CACF,WAAY,KACZ,aAAc,KACd,iBAAkB,IACpB,EACMoB,EAAU,CAAC,EACjB,YAAAqB,EAAAC,EAA2BH,GAA3BI,EAAAC,EAAAC,EAAAF,EAAA,EAAAC,EAAA,UAAAE,EAAAL,EAAA,cAAAE,EAAA,GACE,CADS,IAAMd,EAAjBe,EAAA,MACExB,EAAQ,KAAKS,CAAM,EACnB7B,EAAK,aAAe6B,EACpB,MAAM7B,SAHR4C,EAxmBF,CAwmBEC,EAAA,CAAAD,UAAA,KAAAD,IAAAC,EAAAH,EAAA,oBAAAK,EAAAF,EAAA,KAAAH,YAAA,IAAAI,EAAA,MAAAA,EAAA,IAKA,IAAME,EAAmBU,EAAWrC,CAAO,EACrCrB,EAAW,UAAA+C,EAAMU,EAAY,CAAE,iBAAAT,CAAiB,CAAC,GACvD/C,EAAK,WAAaD,EAAS,WAC3BC,EAAK,iBAAmBD,EAAS,iBACjC,MAAMC,CACR,GAEA,IAAM0D,GAAoB,CAAOC,EAAoBC,IAAgBhE,EAAA,wBACnE,OAAO+D,EAAO,KAAK,YAAY,OAAOC,CAAM,CAC9C,GAEMC,GAA2B,CAAOF,EAAoBC,IAAgBhE,EAAA,wBAC1E,OAAO+D,EAAO,YAAY,OAAOC,CAAM,CACzC,GAEME,GAA8B,CAClC,KAAMJ,GACN,WAAYG,EACd,EAEME,GAAgB,CACpBC,EACAJ,IACGhE,EAAA,wBACH,IAAMqE,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,GAAuB,CAAOR,EAAuBC,IAAgBhE,EAAA,wBACzE,OAAO+D,EAAO,SAAS,OAAOC,CAAM,CACtC,GAEMQ,GAA8B,CAClCT,EACAC,IACGhE,EAAA,wBACH,OAAO+D,EAAO,YAAY,OAAOC,CAAM,CACzC,GAEMS,GAAiC,CACrC,KAAMF,GACN,WAAYC,EACd,EAEME,GAAmB,CACvBN,EACAJ,IACGhE,EAAA,wBACH,IAAM2E,EAAY,EAAQ,mBAAmB,EAAE,QACzCZ,EAAS,IAAIY,EAAU,CAC3B,QAASX,EAAO,OAClB,CAAC,EACKM,EACJG,GAA+BL,EAAgB,gBAAgB,IAAI,EACrE,OAAOE,EAAcP,EAAQC,CAAM,CACrC,GCvqBO,IAAMY,EAAN,KAAmB,CAGxB,YAAYC,EAAgB,CAI5B,YAAS,IAAMC,EAAuB,KAAK,MAAM,EAH/C,KAAK,OAASD,CAChB,CAGF,ECRO,IAAME,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,GACpB,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,GAE7B,OAAOM,GAAU,WACZ,IAAIJ,IAAgB,CAzCnC,IAAAK,EAAAC,EAAAC,EAAAC,EA0CU,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,SACzBC,EAAOP,EAAK,CAAC,IAAb,aAAAO,EAAgB,cAChBC,EAAOR,EAAK,CAAC,IAAb,aAAAQ,EAAgB,QAChB,IAAMK,EAAW,QAAQ,MAAMT,EAAOL,EAAQC,CAAI,EAClD,OAAIa,aAAoB,QACf,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtCF,EACG,KAAYG,GAAqBC,EAAA,wBAChC,IAAMJ,EAAW,MAAMK,EAAsBxB,EAAQ,CACnD,QAASA,EACT,cAAAgB,EACA,cAAAd,EACA,mBAAAa,EACA,iBAAkB,IAAI,KAAK,EAAE,YAAY,EACzC,iBAAAO,EACA,OAAQhB,EAAK,CAAC,EACd,aAAAW,EACA,KAAMC,CACR,CAAC,EACDE,EAAQD,CAAQ,CAClB,EAAC,EACA,MAAOM,GAAU,CAChBJ,EAAOI,CAAK,CACd,CAAC,CACL,CAAC,EAEIN,CACT,EAEK,QAAQ,IAAId,EAAQG,EAAMC,CAAQ,CAC3C,CACF,EACA,OAAO,IAAI,MAAMR,EAAKG,CAAO,CAC/B,ECnEO,IAAMsB,EAAN,KAAsB,CAG3B,YAAYC,EAAgB,CAI5B,SAAM,CAACC,EAAoBC,IACzBC,EAAkB,KAAK,OAAQF,EAAYC,CAAM,EAEnD,aAAWE,GACTC,EAAsB,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,EAAyBJ,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,EAAsBN,EAAQC,CAAI,CAC3C,EAEMM,GAAS,CAACP,EAAgBC,IAAwC,CACtE,GAAI,EAAEA,EAAK,kCAAkC,QAC3C,MAAM,IAAI,MAAM,yDAAyD,EAE3E,OAAOO,EAAuBR,EAAQC,CAAI,CAC5C,EAEMQ,GAAQ,CAACT,EAAgBC,IAC7BS,EAAsBV,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,ECxCA,IAAMY,GAAgC,CACpC,OAAQ,CACN,KAAM,CACJ,cAAe,iCACf,gBAAiBC,CACnB,EACA,WAAY,CACV,cAAe,4BACf,gBAAiBC,EACnB,CACF,EACA,UAAW,CACT,KAAM,CACJ,cAAe,4BACf,gBAAiBC,CACnB,EACA,WAAY,CACV,cAAe,+BACf,gBAAiBC,EACnB,CACF,CACF,EAEMC,GAAgD,CACpD,OAAQC,GACR,UAAWC,EACb,EAMaC,GAAN,KAAkB,CAMvB,YAAY,CACV,OAAAC,EAAS,QAAQ,IAAI,mBACvB,EAAmB,CAAC,EAAG,CACrB,GAAIA,IAAW,OACb,MAAM,IAAI,MACR,0HACF,EAEF,KAAK,OAASA,EACd,KAAK,UAAY,IAAIC,EAAgBD,CAAM,EAC3C,KAAK,MAAQ,IAAIE,EAAaF,CAAM,EACpC,KAAK,MAAQ,IAAIG,EAAaH,CAAM,CACtC,CAEA,IAAI,QAAS,CACX,GAAI,CACF,IAAMI,EAAS,EAAQ,QAAQ,EAAE,QACjC,OAAOC,EAAgB,KAAK,OAAQD,EAAQ,SAAU,QAAQ,CAChE,OAAS,EAAG,CACV,QAAQ,MACN,qEACF,CACF,CACF,CAEA,IAAI,WAAY,CACd,GAAI,CACF,IAAMA,EAAS,EAAQ,mBAAmB,EAAE,QAC5C,OAAOC,EAAgB,KAAK,OAAQD,EAAQ,YAAa,WAAW,CACtE,OAAS,EAAG,CACV,QAAQ,MACN,8EACF,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,CACb,IAAMC,EAAyBL,EACzBM,EAA6C,CACjD,MAAOP,EACP,QAASD,EACT,iBAAkBI,CACpB,EACIF,IAAgBM,EAAkB,gBAAkBN,GACxD,IAAMO,EAAkB,MAAM,KAAK,UAAU,IAC3CV,EACAS,CACF,EACA,GAAI,CAACC,EAAiB,MAAM,IAAI,MAAM,kBAAkB,EACxD,IAAMC,EAAiBD,EAAgB,gBACvC,GAAI,CAACA,EAAgB,WACnB,MAAM,IAAI,MACR,WAAWV,CAAU,oDACvB,EAEF,IAAMY,EAA0BF,EAAgB,SAChD,GAAI,CAACE,EACH,MAAM,IAAI,MACR,WAAWZ,CAAU,kDACvB,EAEF,IAAMa,EAAuBD,EAAwB,MACrD,GAAI,CAACC,EACH,MAAM,IAAI,MACR,WAAWb,CAAU,wDACvB,EAEF,IAAMc,EAAgBD,EAAqB,SACrCE,EAAqB,IAAI,KAAK,EAAE,YAAY,EAC5CC,EAASN,EAAgB,WACzBO,EACJlC,GACE+B,CACF,EAAEH,EAAe,IAAI,EACjBO,EAAgBD,EAAO,cACvBE,EAAkBF,EAAO,gBACzBG,EAAmBhC,GAAyB0B,CAAa,EACzDO,EAAoBX,EAAgB,kBACtCW,IACFL,EAAO,QAAaK,EAAkB,KAExCL,EAAO,OAAYT,EACfA,GAAUO,IAAkB,WAC9BE,EAAO,eAAoB,CAAE,cAAe,EAAK,GAEnD,IAAMM,EAAW,MAAMF,EAAiBV,EAAiBM,CAAM,EACzDO,EAAiBC,IAAiB,CACtC,IAAMC,GAAmB,IAAI,KAAK,EAAE,YAAY,EAChD,OAAOC,GAAaC,EAAA,CAClB,cAAAT,EACA,cAAAJ,EACA,KAAM,CAAC,EACP,OAAAE,EACA,KAAAZ,EACA,mBAAAW,EACA,iBAAAU,GACA,QAAS,KAAK,OACd,SAAApB,EACA,UAAWK,EAAgB,GAC3B,eAAgBA,EAAgB,QAChC,uBAAAF,EACA,SAAUF,EACV,wBAAyB,IACtBkB,GACJ,CACH,EACA,GAAIjB,EAAQ,OAAOqB,GAAeN,EAAUC,EAAeJ,CAAe,EAC1E,IAAMU,EAAa,MAAMN,EAAc,CAAE,iBAAkBD,CAAS,CAAC,EAMrE,MALa,CACX,WAAYO,EAAW,WACvB,aAAcP,EACd,iBAAkBO,EAAW,gBAC/B,CAEF,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","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","GroupManager","apiKey","promptLayerCreateGroup","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","response","resolve","reject","request_response","__async","promptlayerApiHandler","error","TemplateManager","apiKey","promptName","params","getPromptTemplate","body","publishPromptTemplate","getAllPromptTemplates","metadata","apiKey","body","key","value","promptLayerTrackMetadata","score","promptLayerTrackScore","prompt","promptLayerTrackPrompt","group","promptLayerTrackGroup","TrackManager","MAP_PROVIDER_TO_FUNCTION_NAME","openaiStreamChat","openaiStreamCompletion","anthropicStreamMessage","anthropicStreamCompletion","MAP_PROVIDER_TO_FUNCTION","openaiRequest","anthropicRequest","PromptLayer","apiKey","TemplateManager","GroupManager","TrackManager","module","promptLayerBase","_0","__async","promptName","promptVersion","promptReleaseLabel","inputVariables","tags","metadata","groupId","stream","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"]}
|
|
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 * as opentelemetry from '@opentelemetry/api';\nimport {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, RunRequest} from \"@/types\";\nimport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n streamResponse,\n trackRequest,\n} from \"@/utils\";\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 workspaceId?: number;\n wrapWithSpan: typeof wrapWithSpan;\n\n constructor({\n apiKey = process.env.PROMPTLAYER_API_KEY,\n enableTracing = false,\n workspaceId,\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 if (enableTracing && workspaceId === undefined) {\n throw new Error(\"Please set a workspaceId to enable tracing.\")\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.workspaceId = workspaceId;\n this.wrapWithSpan = wrapWithSpan;\n\n if (enableTracing && workspaceId) {\n setupTracing(enableTracing, workspaceId);\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 tracer.startActiveSpan('PromptLayer.templates.get', async (templateSpan) => {\n try {\n templateSpan.setAttribute('function_input', JSON.stringify({\n promptName,\n templateGetParams,\n }));\n const result = await this.templates.get(\n promptName,\n templateGetParams\n );\n templateSpan.setAttribute('function_output', JSON.stringify(result));\n templateSpan.setStatus({code: opentelemetry.SpanStatusCode.OK});\n return result;\n } catch (error) {\n templateSpan.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n } finally {\n templateSpan.end();\n }\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 let requestSpanId: string;\n\n const response = await tracer.startActiveSpan(`${provider_type}.request`, async (requestSpan) => {\n requestSpanId = requestSpan.spanContext().spanId;\n\n try {\n requestSpan.setAttribute('function_input', JSON.stringify({\n promptBlueprint,\n kwargs,\n }));\n const result = await request_function(promptBlueprint, kwargs);\n requestSpan.setAttribute('function_output', JSON.stringify(result));\n requestSpan.setStatus({code: opentelemetry.SpanStatusCode.OK});\n return result;\n } catch (error) {\n requestSpan.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n } finally {\n requestSpan.end();\n }\n });\n\n const _trackRequest = (body: object) => {\n return tracer.startActiveSpan('PromptLayer._trackRequest', async (trackSpan) => {\n try {\n const request_end_time = new Date().toISOString();\n const trackRequestInput = {\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: requestSpanId,\n ...body,\n };\n trackSpan.setAttribute('function_input', JSON.stringify(trackRequestInput));\n const result = await trackRequest(trackRequestInput);\n trackSpan.setAttribute('function_output', JSON.stringify(result));\n trackSpan.setStatus({code: opentelemetry.SpanStatusCode.OK});\n return result;\n } catch (error) {\n trackSpan.setStatus({\n code: opentelemetry.SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n } finally {\n trackSpan.end();\n }\n });\n };\n\n if (stream) 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","import {\n GetPromptTemplateParams,\n GetPromptTemplateResponse,\n ListPromptTemplatesResponse,\n Pagination,\n PublishPromptTemplate,\n PublishPromptTemplateResponse,\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 = 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 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\nexport {\n anthropicRequest,\n anthropicStreamCompletion,\n anthropicStreamMessage,\n getAllPromptTemplates,\n getPromptTemplate,\n openaiRequest,\n openaiStreamChat,\n openaiStreamCompletion,\n promptLayerApiRequest,\n promptLayerCreateGroup,\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n promptlayerApiHandler,\n publishPromptTemplate,\n streamResponse,\n trackRequest,\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, workspaceId: number) => {\n const provider = new NodeTracerProvider();\n const exporter = new PromptLayerSpanExporter(enableTracing, workspaceId);\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 private workspaceId: number;\n\n constructor(enableTracing: boolean, workspaceId: number) {\n this.apiKey = process.env.PROMPTLAYER_API_KEY;\n this.enableTracing = enableTracing;\n this.url = `${URL_API_PROMPTLAYER}/spans-bulk`;\n this.workspaceId = workspaceId;\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 workspace_id: this.workspaceId,\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 async function (...args: any[]) {\n const tracer = getTracer();\n\n return tracer.startActiveSpan(functionName, async (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 = await func(...args);\n span.setAttribute('function_output', JSON.stringify(result));\n span.setStatus({ code: opentelemetry.SpanStatusCode.OK });\n return result;\n } catch (error) {\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 throw error;\n } finally {\n span.end();\n }\n });\n };\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":["opentelemetry","URL_API_PROMPTLAYER","promptlayerApiHandler","apiKey","body","__async","proxyGenerator","promptLayerApiRequest","response","data","warnOnBadResponse","promptLayerTrackMetadata","__spreadProps","__spreadValues","promptLayerTrackScore","promptLayerTrackPrompt","promptLayerTrackGroup","promptLayerCreateGroup","e","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","GroupManager","apiKey","promptLayerCreateGroup","opentelemetry","SimpleSpanProcessor","NodeTracerProvider","SpanKind","SpanStatusCode","ExportResultCode","PromptLayerSpanExporter","enableTracing","workspaceId","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","workspaceId","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","__async","getTracer","span","key","value","result","error","TemplateManager","apiKey","promptName","params","getPromptTemplate","body","publishPromptTemplate","getAllPromptTemplates","metadata","apiKey","body","key","value","promptLayerTrackMetadata","score","promptLayerTrackScore","prompt","promptLayerTrackPrompt","group","promptLayerTrackGroup","TrackManager","MAP_PROVIDER_TO_FUNCTION_NAME","openaiStreamChat","openaiStreamCompletion","anthropicStreamMessage","anthropicStreamCompletion","MAP_PROVIDER_TO_FUNCTION","openaiRequest","anthropicRequest","PromptLayer","apiKey","enableTracing","workspaceId","TemplateManager","GroupManager","TrackManager","wrapWithSpan","setupTracing","module","promptLayerBase","e","_0","__async","promptName","promptVersion","promptReleaseLabel","inputVariables","tags","metadata","groupId","stream","tracer","getTracer","span","functionInput","prompt_input_variables","templateGetParams","promptBlueprint","templateSpan","result","error","promptTemplate","promptBlueprintMetadata","promptBlueprintModel","provider_type","request_start_time","kwargs","config","function_name","stream_function","request_function","provider_base_url","requestSpanId","response","requestSpan","_trackRequest","body","trackSpan","request_end_time","trackRequestInput","__spreadValues","trackRequest","streamResponse","requestLog","functionOutput"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -4,6 +4,8 @@ declare class GroupManager {
|
|
|
4
4
|
create: () => Promise<number | boolean>;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
+
declare const wrapWithSpan: (functionName: string, func: Function, attributes?: Record<string, any>) => (...args: any[]) => Promise<any>;
|
|
8
|
+
|
|
7
9
|
interface TrackMetadata {
|
|
8
10
|
request_id: number;
|
|
9
11
|
metadata: Record<string, string>;
|
|
@@ -104,7 +106,11 @@ type ToolMessage = {
|
|
|
104
106
|
tool_call_id: string;
|
|
105
107
|
name?: string;
|
|
106
108
|
};
|
|
107
|
-
type
|
|
109
|
+
type PlaceholderMessage = {
|
|
110
|
+
role: "placeholder";
|
|
111
|
+
name: string;
|
|
112
|
+
};
|
|
113
|
+
type Message = SystemMessage | UserMessage | AssistantMessage | FunctionMessage | ToolMessage | PlaceholderMessage;
|
|
108
114
|
type ChatFunctionCall = {
|
|
109
115
|
name: string;
|
|
110
116
|
};
|
|
@@ -203,15 +209,20 @@ declare class TrackManager {
|
|
|
203
209
|
|
|
204
210
|
interface ClientOptions {
|
|
205
211
|
apiKey?: string;
|
|
212
|
+
enableTracing?: boolean;
|
|
213
|
+
workspaceId?: number;
|
|
206
214
|
}
|
|
207
215
|
declare class PromptLayer {
|
|
208
216
|
apiKey: string;
|
|
209
217
|
templates: TemplateManager;
|
|
210
218
|
group: GroupManager;
|
|
211
219
|
track: TrackManager;
|
|
212
|
-
|
|
213
|
-
|
|
220
|
+
enableTracing: boolean;
|
|
221
|
+
workspaceId?: number;
|
|
222
|
+
wrapWithSpan: typeof wrapWithSpan;
|
|
223
|
+
constructor({ apiKey, enableTracing, workspaceId, }?: ClientOptions);
|
|
214
224
|
get Anthropic(): any;
|
|
225
|
+
get OpenAI(): any;
|
|
215
226
|
run({ promptName, promptVersion, promptReleaseLabel, inputVariables, tags, metadata, groupId, stream, }: RunRequest): Promise<AsyncGenerator<{
|
|
216
227
|
request_id: number | null;
|
|
217
228
|
raw_response: any;
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ declare class GroupManager {
|
|
|
4
4
|
create: () => Promise<number | boolean>;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
+
declare const wrapWithSpan: (functionName: string, func: Function, attributes?: Record<string, any>) => (...args: any[]) => Promise<any>;
|
|
8
|
+
|
|
7
9
|
interface TrackMetadata {
|
|
8
10
|
request_id: number;
|
|
9
11
|
metadata: Record<string, string>;
|
|
@@ -104,7 +106,11 @@ type ToolMessage = {
|
|
|
104
106
|
tool_call_id: string;
|
|
105
107
|
name?: string;
|
|
106
108
|
};
|
|
107
|
-
type
|
|
109
|
+
type PlaceholderMessage = {
|
|
110
|
+
role: "placeholder";
|
|
111
|
+
name: string;
|
|
112
|
+
};
|
|
113
|
+
type Message = SystemMessage | UserMessage | AssistantMessage | FunctionMessage | ToolMessage | PlaceholderMessage;
|
|
108
114
|
type ChatFunctionCall = {
|
|
109
115
|
name: string;
|
|
110
116
|
};
|
|
@@ -203,15 +209,20 @@ declare class TrackManager {
|
|
|
203
209
|
|
|
204
210
|
interface ClientOptions {
|
|
205
211
|
apiKey?: string;
|
|
212
|
+
enableTracing?: boolean;
|
|
213
|
+
workspaceId?: number;
|
|
206
214
|
}
|
|
207
215
|
declare class PromptLayer {
|
|
208
216
|
apiKey: string;
|
|
209
217
|
templates: TemplateManager;
|
|
210
218
|
group: GroupManager;
|
|
211
219
|
track: TrackManager;
|
|
212
|
-
|
|
213
|
-
|
|
220
|
+
enableTracing: boolean;
|
|
221
|
+
workspaceId?: number;
|
|
222
|
+
wrapWithSpan: typeof wrapWithSpan;
|
|
223
|
+
constructor({ apiKey, enableTracing, workspaceId, }?: ClientOptions);
|
|
214
224
|
get Anthropic(): any;
|
|
225
|
+
get OpenAI(): any;
|
|
215
226
|
run({ promptName, promptVersion, promptReleaseLabel, inputVariables, tags, metadata, groupId, stream, }: RunRequest): Promise<AsyncGenerator<{
|
|
216
227
|
request_id: number | null;
|
|
217
228
|
raw_response: any;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
"use strict";var N=Object.defineProperty,me=Object.defineProperties,ue=Object.getOwnPropertyDescriptor,he=Object.getOwnPropertyDescriptors,fe=Object.getOwnPropertyNames,D=Object.getOwnPropertySymbols;var B=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable;var Y=(r,e)=>{if(e=Symbol[r])return e;throw Error("Symbol."+r+" is not defined")};var J=(r,e,t)=>e in r?N(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,d=(r,e)=>{for(var t in e||(e={}))B.call(e,t)&&J(r,t,e[t]);if(D)for(var t of D(e))de.call(e,t)&&J(r,t,e[t]);return r},R=(r,e)=>me(r,he(e));var ye=(r,e)=>{for(var t in e)N(r,t,{get:e[t],enumerable:!0})},ge=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of fe(e))!B.call(r,n)&&n!==t&&N(r,n,{get:()=>e[n],enumerable:!(o=ue(e,n))||o.enumerable});return r};var _e=r=>ge(N({},"__esModule",{value:!0}),r);var c=(r,e,t)=>new Promise((o,n)=>{var a=s=>{try{p(t.next(s))}catch(h){n(h)}},i=s=>{try{p(t.throw(s))}catch(h){n(h)}},p=s=>s.done?o(s.value):Promise.resolve(s.value).then(a,i);p((t=t.apply(r,e)).next())}),w=function(r,e){this[0]=r,this[1]=e},W=(r,e,t)=>{var o=(i,p,s,h)=>{try{var m=t[i](p),f=(p=m.value)instanceof w,u=m.done;Promise.resolve(f?p[0]:p).then(l=>f?o(i==="return"?i:"next",p[1]?{done:l.done,value:l.value}:l,s,h):s({value:l,done:u})).catch(l=>o("throw",l,s,h))}catch(l){h(l)}},n=i=>a[i]=p=>new Promise((s,h)=>o(i,p,s,h)),a={};return t=t.apply(r,e),a[Symbol.asyncIterator]=()=>a,n("next"),n("throw"),n("return"),a};var x=(r,e,t)=>(e=r[Y("asyncIterator")])?e.call(r):(r=r[Y("iterator")](),e={},t=(o,n)=>(n=r[o])&&(e[o]=a=>new Promise((i,p,s)=>(a=n.call(r,a),s=a.done,Promise.resolve(a.value).then(h=>i({value:h,done:s}),p)))),t("next"),t("return"),e);var Le={};ye(Le,{PromptLayer:()=>E});module.exports=_e(Le);var g="https://api.promptlayer.com",F=(r,e)=>c(void 0,null,function*(){return e.request_response[Symbol.asyncIterator]!==void 0?we(r,e.request_response,e):yield H(r,e)}),H=(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&&_(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}),X=(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(d({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return _(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}),V=(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(d({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return _(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}),z=(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(d({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return _(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}),Q=(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(d({},e),{api_key:r}))}),o=yield t.json();if(t.status!==200)return _(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}),Z=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?(_(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}}),ee=(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?(_(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):a}catch(o){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${o}`),null}}),te=(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:d({},e),prompt_version:d({},e),release_labels:e.release_labels?e.release_labels:void 0})}),o=yield t.json();return t.status===400&&_(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}`)}}),re=(r,e)=>c(void 0,null,function*(){var t;try{let o=new URL(`${g}/prompt-templates`);Object.entries(e||{}).forEach(([i,p])=>o.searchParams.append(i,p.toString()));let n=yield fetch(o,{headers:{"Content-Type":"application/json","X-API-KEY":r}}),a=yield n.json();return n.status!==200?(_(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}}),v=r=>{var i,p,s,h,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 f of r){if(f.choices.length===0)continue;let u=f.choices[0].delta;u.content&&(e=`${e||""}${u.content||""}`),u.function_call&&(t={name:`${t?t.name:""}${u.function_call.name||""}`,arguments:`${t?t.arguments:""}${u.function_call.arguments||""}`});let l=(i=u.tool_calls)==null?void 0:i[0];if(l){a=a||[];let y=a.at(-1);if(!y||l.id){a.push({id:l.id||"",type:l.type||"function",function:{name:((p=l.function)==null?void 0:p.name)||"",arguments:((s=l.function)==null?void 0:s.arguments)||""}});continue}y.function.name=`${y.function.name}${((h=l.function)==null?void 0:h.name)||""}`,y.function.arguments=`${y.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},j=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=d({},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},Pe=(r,e="openai.chat.completions.create")=>{if("completion"in r[0])return r.reduce((t,o)=>R(d({},o),{completion:`${t.completion}${o.completion}`}),{});if(e==="anthropic.messages.create")return j(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=v(r);return t.choices[0]=d(d({},t.choices[0]),t.choices[0].message),t}return""};function we(r,e,t){return W(this,null,function*(){let o=[];try{for(var i=x(e),p,s,h;p=!(s=yield new w(i.next())).done;p=!1){let m=s.value;yield t.return_pl_id?[m,null]:m,o.push(m)}}catch(s){h=[s]}finally{try{p&&(s=i.return)&&(yield new w(s.call(i)))}finally{if(h)throw h[0]}}let n=Pe(o,t.function_name),a=yield new w(H(r,R(d({},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 _=(r,e)=>{try{console.warn(`${e}: ${r.message}`)}catch(t){console.warn(`${e}: ${r}`)}},oe=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&&_(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{}}),ne=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},ae=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 se(r,e,t){return W(this,null,function*(){let o={request_id:null,raw_response:null,prompt_blueprint:null},n=[];try{for(var p=x(r),s,h,m;s=!(h=yield new w(p.next())).done;s=!1){let f=h.value;n.push(f),o.raw_response=f,yield o}}catch(h){m=[h]}finally{try{s&&(h=p.return)&&(yield new w(h.call(p)))}finally{if(m)throw m[0]}}let a=t(n),i=yield new w(e({request_response:a}));o.request_id=i.request_id,o.prompt_blueprint=i.prompt_blueprint,yield o})}var Te=(r,e)=>c(void 0,null,function*(){return r.chat.completions.create(e)}),Re=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),ke={chat:Te,completion:Re},ie=(r,e)=>c(void 0,null,function*(){let t=require("openai").default,o=new t({baseURL:e.baseURL}),n=ke[r.prompt_template.type];return n(o,e)}),be=(r,e)=>c(void 0,null,function*(){return r.messages.create(e)}),qe=(r,e)=>c(void 0,null,function*(){return r.completions.create(e)}),Ae={chat:be,completion:qe},pe=(r,e)=>c(void 0,null,function*(){let t=require("@anthropic-ai/sdk").default,o=new t({baseURL:e.baseURL}),n=Ae[r.prompt_template.type];return n(o,e)});var I=class{constructor(e){this.create=()=>Z(this.apiKey);this.apiKey=e}};var M=(r,e,t="",o="openai")=>{let n={construct:(a,i)=>{let p=Reflect.construct(a,i);return Object.defineProperties(p,{function_name:{value:t,writable:!0},provider:{value:o}}),new Proxy(p,n)},get:(a,i,p)=>{let s=a[i],h=`${Reflect.get(a,"function_name")}.${i.toString()}`;return typeof s=="object"?(Object.defineProperties(s,{function_name:{value:h,writable:!0},provider:{value:o}}),new Proxy(s,n)):typeof s=="function"?(...m)=>{var T,A,P,b;let f=new Date().toISOString(),u=Reflect.get(a,"provider"),l=(T=m[0])==null?void 0:T.return_pl_id,y=(A=m[0])==null?void 0:A.pl_tags;(P=m[0])==null||delete P.return_pl_id,(b=m[0])==null||delete b.pl_tags;let k=Reflect.apply(s,a,m);return k instanceof Promise?new Promise(($,L)=>{k.then(q=>c(void 0,null,function*(){let C=yield F(r,{api_key:r,provider_type:u,function_name:h,request_start_time:f,request_end_time:new Date().toISOString(),request_response:q,kwargs:m[0],return_pl_id:l,tags:y});$(C)})).catch(q=>{L(q)})}):k}:Reflect.get(a,i,p)}};return new Proxy(e,n)};var O=class{constructor(e){this.get=(e,t)=>ee(this.apiKey,e,t);this.publish=e=>te(this.apiKey,e);this.all=e=>re(this.apiKey,e);this.apiKey=e}};var Ce=(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 X(r,e)},Ne=(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 V(r,e)},Ie=(r,e)=>{if(!(e.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return z(r,e)},Oe=(r,e)=>Q(r,e),S=class{constructor(e){this.group=e=>Oe(this.apiKey,e);this.metadata=e=>Ce(this.apiKey,e);this.prompt=e=>Ie(this.apiKey,e);this.score=e=>Ne(this.apiKey,e);this.apiKey=e}};var Se={openai:{chat:{function_name:"openai.chat.completions.create",stream_function:v},completion:{function_name:"openai.completions.create",stream_function:ne}},anthropic:{chat:{function_name:"anthropic.messages.create",stream_function:j},completion:{function_name:"anthropic.completions.create",stream_function:ae}}},$e={openai:ie,anthropic:pe},E=class{constructor({apiKey:e=process.env.PROMPTLAYER_API_KEY}={}){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.templates=new O(e),this.group=new I(e),this.track=new S(e)}get OpenAI(){try{let e=require("openai").default;return M(this.apiKey,e,"openai","openai")}catch(e){console.error("To use the OpenAI module, you must install the @openai/api package.")}}get Anthropic(){try{let e=require("@anthropic-ai/sdk").default;return M(this.apiKey,e,"anthropic","anthropic")}catch(e){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}run(h){return c(this,arguments,function*({promptName:e,promptVersion:t,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:i,groupId:p,stream:s=!1}){let m=n,f={label:o,version:t,metadata_filters:i};n&&(f.input_variables=n);let u=yield this.templates.get(e,f);if(!u)throw new Error("Prompt not found");let l=u.prompt_template;if(!u.llm_kwargs)throw new Error(`Prompt '${e}' does not have any LLM kwargs associated with it.`);let y=u.metadata;if(!y)throw new Error(`Prompt '${e}' does not have any metadata associated with it.`);let k=y.model;if(!k)throw new Error(`Prompt '${e}' does not have a model parameters associated with it.`);let T=k.provider,A=new Date().toISOString(),P=u.llm_kwargs,b=Se[T][l.type],$=b.function_name,L=b.stream_function,q=$e[T],C=u.provider_base_url;C&&(P.baseURL=C.url),P.stream=s,s&&T==="openai"&&(P.stream_options={include_usage:!0});let G=yield q(u,P),K=ce=>{let le=new Date().toISOString();return oe(d({function_name:$,provider_type:T,args:[],kwargs:P,tags:a,request_start_time:A,request_end_time:le,api_key:this.apiKey,metadata:i,prompt_id:u.id,prompt_version:u.version,prompt_input_variables:m,group_id:p,return_prompt_blueprint:!0},ce))};if(s)return se(G,K,L);let U=yield K({request_response:G});return{request_id:U.request_id,raw_response:G,prompt_blueprint:U.prompt_blueprint}})}};0&&(module.exports={PromptLayer});
|
|
1
|
+
"use strict";var Lt=Object.create;var x=Object.defineProperty,xt=Object.defineProperties,vt=Object.getOwnPropertyDescriptor,$t=Object.getOwnPropertyDescriptors,Wt=Object.getOwnPropertyNames,st=Object.getOwnPropertySymbols,Gt=Object.getPrototypeOf,pt=Object.prototype.hasOwnProperty,Kt=Object.prototype.propertyIsEnumerable;var it=(r,t)=>{if(t=Symbol[r])return t;throw Error("Symbol."+r+" is not defined")};var ct=(r,t,e)=>t in r?x(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,g=(r,t)=>{for(var e in t||(t={}))pt.call(t,e)&&ct(r,e,t[e]);if(st)for(var e of st(t))Kt.call(t,e)&&ct(r,e,t[e]);return r},A=(r,t)=>xt(r,$t(t));var jt=(r,t)=>{for(var e in t)x(r,e,{get:t[e],enumerable:!0})},ut=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Wt(t))!pt.call(r,n)&&n!==e&&x(r,n,{get:()=>t[n],enumerable:!(o=vt(t,n))||o.enumerable});return r};var D=(r,t,e)=>(e=r!=null?Lt(Gt(r)):{},ut(t||!r||!r.__esModule?x(e,"default",{value:r,enumerable:!0}):e,r)),Mt=r=>ut(x({},"__esModule",{value:!0}),r);var c=(r,t,e)=>new Promise((o,n)=>{var a=i=>{try{p(e.next(i))}catch(f){n(f)}},s=i=>{try{p(e.throw(i))}catch(f){n(f)}},p=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,s);p((e=e.apply(r,t)).next())}),C=function(r,t){this[0]=r,this[1]=t},Y=(r,t,e)=>{var o=(s,p,i,f)=>{try{var u=e[s](p),y=(p=u.value)instanceof C,h=u.done;Promise.resolve(y?p[0]:p).then(l=>y?o(s==="return"?s:"next",p[1]?{done:l.done,value:l.value}:l,i,f):i({value:l,done:h})).catch(l=>o("throw",l,i,f))}catch(l){f(l)}},n=s=>a[s]=p=>new Promise((i,f)=>o(s,p,i,f)),a={};return e=e.apply(r,t),a[Symbol.asyncIterator]=()=>a,n("next"),n("throw"),n("return"),a};var B=(r,t,e)=>(t=r[it("asyncIterator")])?t.call(r):(r=r[it("iterator")](),t={},e=(o,n)=>(n=r[o])&&(t[o]=a=>new Promise((s,p,i)=>(a=n.call(r,a),i=a.done,Promise.resolve(a.value).then(f=>s({value:f,done:i}),p)))),e("next"),e("return"),t);var oe={};jt(oe,{PromptLayer:()=>Q});module.exports=Mt(oe);var N=D(require("@opentelemetry/api"));var w=process.env.URL_API_PROMPTLAYER||"https://api.promptlayer.com",lt=(r,t)=>c(void 0,null,function*(){return t.request_response[Symbol.asyncIterator]!==void 0?Jt(r,t.request_response,t):yield mt(r,t)}),mt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),o=yield e.json();if(e.status!==200&&S(o,"WARNING: While logging your request, PromptLayer experienced the following error:"),o&&t.return_pl_id)return[t.request_response,o.request_id]}catch(e){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${e}`)}return t.request_response}),dt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/library-track-metadata`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A(g({},t),{api_key:r}))}),o=yield e.json();if(e.status!==200)return S(o,"WARNING: While logging metadata to your request, PromptLayer experienced the following error"),!1}catch(e){return console.warn(`WARNING: While logging metadata to your request, PromptLayer experienced the following error: ${e}`),!1}return!0}),ft=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/library-track-score`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A(g({},t),{api_key:r}))}),o=yield e.json();if(e.status!==200)return S(o,"WARNING: While scoring your request, PromptLayer experienced the following error"),!1}catch(e){return console.warn(`WARNING: While scoring your request, PromptLayer experienced the following error: ${e}`),!1}return!0}),ht=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/library-track-prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A(g({},t),{api_key:r}))}),o=yield e.json();if(e.status!==200)return S(o,"WARNING: While associating your request with a prompt template, PromptLayer experienced the following error"),!1}catch(e){return console.warn(`WARNING: While associating your request with a prompt template, PromptLayer experienced the following error: ${e}`),!1}return!0}),yt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/track-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A(g({},t),{api_key:r}))}),o=yield e.json();if(e.status!==200)return S(o,"WARNING: While associating your request with a group, PromptLayer experienced the following error"),!1}catch(e){return console.warn(`WARNING: While associating your request with a group, PromptLayer experienced the following error: ${e}`),!1}return!0}),gt=r=>c(void 0,null,function*(){try{let t=yield fetch(`${w}/create-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r})}),e=yield t.json();return t.status!==200?(S(e,"WARNING: While creating a group PromptLayer had the following error"),!1):e.id}catch(t){return console.warn(`WARNING: While creating a group PromptLayer had the following error: ${t}`),!1}}),_t=(r,t,e)=>c(void 0,null,function*(){try{let o=new URL(`${w}/prompt-templates/${t}`),n=yield fetch(o,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify(e)}),a=yield n.json();return n.status!==200?(S(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):a}catch(o){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${o}`),null}}),Pt=(r,t)=>c(void 0,null,function*(){try{let e=yield fetch(`${w}/rest/prompt-templates`,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":r},body:JSON.stringify({prompt_template:g({},t),prompt_version:g({},t),release_labels:t.release_labels?t.release_labels:void 0})}),o=yield e.json();return e.status===400&&S(o,"WARNING: While publishing a prompt template PromptLayer had the following error"),o}catch(e){console.warn(`WARNING: While publishing a prompt template PromptLayer had the following error: ${e}`)}}),wt=(r,t)=>c(void 0,null,function*(){var e;try{let o=new URL(`${w}/prompt-templates`);Object.entries(t||{}).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?(S(a,"WARNING: While fetching all prompt templates PromptLayer had the following error"),null):(e=a.items)!=null?e:[]}catch(o){return console.warn(`WARNING: While fetching all prompt templates PromptLayer had the following error: ${o}`),null}}),F=r=>{var s,p,i,f,u;let t=null,e,o={id:"",choices:[],created:Date.now(),model:"",object:"chat.completion"},n=r.at(-1);if(!n)return o;let a;for(let y of r){if(y.choices.length===0)continue;let h=y.choices[0].delta;h.content&&(t=`${t||""}${h.content||""}`),h.function_call&&(e={name:`${e?e.name:""}${h.function_call.name||""}`,arguments:`${e?e.arguments:""}${h.function_call.arguments||""}`});let l=(s=h.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}${((f=l.function)==null?void 0:f.name)||""}`,T.function.arguments=`${T.function.arguments}${((u=l.function)==null?void 0:u.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:t,function_call:e||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},H=r=>{let t={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 t;let o="";for(let n of r)switch(n.type){case"message_start":{t=g({},n.message);break}case"content_block_delta":n.delta.type==="text_delta"&&(o=`${o}${n.delta.text}`);case"message_delta":"usage"in n&&(t.usage.output_tokens=n.usage.output_tokens),"stop_reason"in n.delta&&(t.stop_reason=n.delta.stop_reason);default:break}return t.content.push({type:"text",text:o}),t},Ut=(r,t="openai.chat.completions.create")=>{if("completion"in r[0])return r.reduce((e,o)=>A(g({},o),{completion:`${e.completion}${o.completion}`}),{});if(t==="anthropic.messages.create")return H(r);if("text"in r[0].choices[0]){let e="";for(let n of r)e=`${e}${n.choices[0].text}`;let o=structuredClone(r.at(-1));return o.choices[0].text=e,o}if("delta"in r[0].choices[0]){let e=F(r);return e.choices[0]=g(g({},e.choices[0]),e.choices[0].message),e}return""};function Jt(r,t,e){return Y(this,null,function*(){let o=[];try{for(var s=B(t),p,i,f;p=!(i=yield new C(s.next())).done;p=!1){let u=i.value;yield e.return_pl_id?[u,null]:u,o.push(u)}}catch(i){f=[i]}finally{try{p&&(i=s.return)&&(yield new C(i.call(s)))}finally{if(f)throw f[0]}}let n=Ut(o,e.function_name),a=yield new C(mt(r,A(g({},e),{request_response:n,request_end_time:new Date().toISOString()})));if(a&&e.return_pl_id){let u=a[1];yield[o.at(-1),u]}})}var S=(r,t)=>{try{console.warn(`${t}: ${r.message}`)}catch(e){console.warn(`${t}: ${r}`)}},Tt=r=>c(void 0,null,function*(){try{let t=yield fetch(`${w}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return t.status!==200&&S(t,"WARNING: While logging your request, PromptLayer experienced the following error:"),t.json()}catch(t){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${t}`)}return{}}),St=r=>{let t={id:"",choices:[{finish_reason:"stop",index:0,text:"",logprobs:null}],created:Date.now(),model:"",object:"text_completion"},e=r.at(-1);if(!e)return t;let o="";for(let n of r)n.choices.length>0&&n.choices[0].text&&(o=`${o}${n.choices[0].text}`);return t.choices[0].text=o,t.id=e.id,t.created=e.created,t.model=e.model,t.system_fingerprint=e.system_fingerprint,t.usage=e.usage,t},Rt=r=>{let t={completion:"",id:"",model:"",stop_reason:"",type:"completion"},e=r.at(-1);if(!e)return t;let o="";for(let n of r)o=`${o}${n.completion}`;return t.completion=o,t.id=e.id,t.model=e.model,t.stop_reason=e.stop_reason,t};function bt(r,t,e){return Y(this,null,function*(){let o={request_id:null,raw_response:null,prompt_blueprint:null},n=[];try{for(var p=B(r),i,f,u;i=!(f=yield new C(p.next())).done;i=!1){let y=f.value;n.push(y),o.raw_response=y,yield o}}catch(f){u=[f]}finally{try{i&&(f=p.return)&&(yield new C(f.call(p)))}finally{if(u)throw u[0]}}let a=e(n),s=yield new C(t({request_response:a}));o.request_id=s.request_id,o.prompt_blueprint=s.prompt_blueprint,yield o})}var Dt=(r,t)=>c(void 0,null,function*(){return r.chat.completions.create(t)}),Yt=(r,t)=>c(void 0,null,function*(){return r.completions.create(t)}),Bt={chat:Dt,completion:Yt},At=(r,t)=>c(void 0,null,function*(){let e=require("openai").default,o=new e({baseURL:t.baseURL}),n=Bt[r.prompt_template.type];return n(o,t)}),Ft=(r,t)=>c(void 0,null,function*(){return r.messages.create(t)}),Ht=(r,t)=>c(void 0,null,function*(){return r.completions.create(t)}),Xt={chat:Ft,completion:Ht},Ot=(r,t)=>c(void 0,null,function*(){let e=require("@anthropic-ai/sdk").default,o=new e({baseURL:t.baseURL}),n=Xt[r.prompt_template.type];return n(o,t)});var K=class{constructor(t){this.create=()=>gt(this.apiKey);this.apiKey=t}};var Nt=D(require("@opentelemetry/api")),kt=require("@opentelemetry/sdk-trace-base"),It=require("@opentelemetry/sdk-trace-node");var R=require("@opentelemetry/api"),v=require("@opentelemetry/core");var X=class{constructor(t,e){this.apiKey=process.env.PROMPTLAYER_API_KEY,this.enableTracing=t,this.url=`${w}/spans-bulk`,this.workspaceId=e}attributesToObject(t){return t?Object.fromEntries(Object.entries(t)):{}}spanKindToString(t){return{[R.SpanKind.INTERNAL]:"SpanKind.INTERNAL",[R.SpanKind.SERVER]:"SpanKind.SERVER",[R.SpanKind.CLIENT]:"SpanKind.CLIENT",[R.SpanKind.PRODUCER]:"SpanKind.PRODUCER",[R.SpanKind.CONSUMER]:"SpanKind.CONSUMER"}[t]||"SpanKind.INTERNAL"}statusCodeToString(t){return{[R.SpanStatusCode.ERROR]:"StatusCode.ERROR",[R.SpanStatusCode.OK]:"StatusCode.OK",[R.SpanStatusCode.UNSET]:"StatusCode.UNSET"}[t]||"StatusCode.UNSET"}toNanoseconds(t){return(BigInt(t[0])*BigInt(1e9)+BigInt(t[1])).toString()}export(t){if(!this.enableTracing)return Promise.resolve(v.ExportResultCode.SUCCESS);let e=t.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:A(g({},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:e,workspace_id:this.workspaceId})}).then(o=>o.ok?v.ExportResultCode.SUCCESS:(console.error(`Error exporting spans
|
|
2
|
+
HTTP error! status: ${o.status}`),v.ExportResultCode.FAILED)).catch(o=>(console.error("Error exporting spans:",o),v.ExportResultCode.FAILED))}shutdown(){return Promise.resolve()}},Ct=X;var I=(r="promptlayer-tracer")=>Nt.trace.getTracer(r),Et=(r,t)=>{let e=new It.NodeTracerProvider,o=new Ct(r,t),n=new kt.SimpleSpanProcessor(o);e.addSpanProcessor(n),e.register()};var zt=I(),z=(r,t,e="",o="openai")=>{let n={construct:(a,s)=>{let p=Reflect.construct(a,s);return Object.defineProperties(p,{function_name:{value:e,writable:!0},provider:{value:o}}),new Proxy(p,n)},get:(a,s,p)=>{let i=a[s],f=`${Reflect.get(a,"function_name")}.${s.toString()}`;return typeof i=="object"?(Object.defineProperties(i,{function_name:{value:f,writable:!0},provider:{value:o}}),new Proxy(i,n)):typeof i=="function"?(...u)=>{var P,$,E,q;let y=new Date().toISOString(),h=Reflect.get(a,"provider"),l=(P=u[0])==null?void 0:P.return_pl_id,T=($=u[0])==null?void 0:$.pl_tags;return(E=u[0])==null||delete E.return_pl_id,(q=u[0])==null||delete q.pl_tags,zt.startActiveSpan(`${h}.${f}`,m=>c(void 0,null,function*(){try{m.setAttribute("function_input",JSON.stringify(u));let b=Reflect.apply(i,a,u),O=m.spanContext().spanId;return b instanceof Promise?new Promise((W,U)=>{b.then(k=>c(void 0,null,function*(){let G=yield lt(r,{api_key:r,provider_type:h,function_name:f,request_start_time:y,request_end_time:new Date().toISOString(),request_response:k,kwargs:u[0],return_pl_id:l,tags:T,span_id:O});m.setAttribute("function_output",JSON.stringify(G)),m.setAttribute("response_status","success"),m.end(),W(G)})).catch(k=>{m.recordException(k),m.setAttribute("response_status","error"),m.end(),U(k)})}):(m.setAttribute("function_output",JSON.stringify(b)),m.setAttribute("response_status","success"),m.end(),b)}catch(b){throw m.recordException(b),m.setAttribute("response_status","error"),m.end(),b}}))}:Reflect.get(a,s,p)}};return new Proxy(t,n)};var V=D(require("@opentelemetry/api"));var qt=(r,t,e)=>function(...o){return c(this,null,function*(){return I().startActiveSpan(r,a=>c(this,null,function*(){try{e&&Object.entries(e).forEach(([p,i])=>{a.setAttribute(p,i)}),a.setAttribute("function_input",JSON.stringify(o));let s=yield t(...o);return a.setAttribute("function_output",JSON.stringify(s)),a.setStatus({code:V.SpanStatusCode.OK}),s}catch(s){throw a.setAttribute("function_input",JSON.stringify(o)),a.setStatus({code:V.SpanStatusCode.ERROR,message:s instanceof Error?s.message:"Unknown error"}),s}finally{a.end()}}))})};var j=class{constructor(t){this.get=(t,e)=>_t(this.apiKey,t,e);this.publish=t=>Pt(this.apiKey,t);this.all=t=>wt(this.apiKey,t);this.apiKey=t}};var Vt=(r,t)=>{if(!(t.metadata instanceof Object))throw new Error("Please provide a dictionary of metadata.");for(let[e,o]of Object.entries(t.metadata))if(typeof e!="string"||typeof o!="string")throw new Error("Please provide a dictionary of metadata with key value pair of strings.");return dt(r,t)},Qt=(r,t)=>{if(typeof t.score!="number")throw new Error("Score must be a number");if(t.score<0||t.score>100)throw new Error("Score must be a number between 0 and 100.");return ft(r,t)},Zt=(r,t)=>{if(!(t.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return ht(r,t)},te=(r,t)=>yt(r,t),M=class{constructor(t){this.group=t=>te(this.apiKey,t);this.metadata=t=>Vt(this.apiKey,t);this.prompt=t=>Zt(this.apiKey,t);this.score=t=>Qt(this.apiKey,t);this.apiKey=t}};var ee={openai:{chat:{function_name:"openai.chat.completions.create",stream_function:F},completion:{function_name:"openai.completions.create",stream_function:St}},anthropic:{chat:{function_name:"anthropic.messages.create",stream_function:H},completion:{function_name:"anthropic.completions.create",stream_function:Rt}}},re={openai:At,anthropic:Ot},Q=class{constructor({apiKey:t=process.env.PROMPTLAYER_API_KEY,enableTracing:e=!1,workspaceId:o}={}){if(t===void 0)throw new Error("PromptLayer API key not provided. Please set the PROMPTLAYER_API_KEY environment variable or pass the api_key parameter.");if(e&&o===void 0)throw new Error("Please set a workspaceId to enable tracing.");this.apiKey=t,this.enableTracing=e,this.templates=new j(t),this.group=new K(t),this.track=new M(t),this.workspaceId=o,this.wrapWithSpan=qt,e&&o&&Et(e,o)}get Anthropic(){try{let t=require("@anthropic-ai/sdk").default;return z(this.apiKey,t,"anthropic","anthropic")}catch(t){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}}get OpenAI(){try{let t=require("openai").default;return z(this.apiKey,t,"openai","openai")}catch(t){console.error("To use the OpenAI module, you must install the @openai/api package.")}}run(f){return c(this,arguments,function*({promptName:t,promptVersion:e,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i=!1}){let u=I();return u.startActiveSpan("PromptLayer.run",y=>c(this,null,function*(){try{let h={promptName:t,promptVersion:e,promptReleaseLabel:o,inputVariables:n,tags:a,metadata:s,groupId:p,stream:i};y.setAttribute("function_input",JSON.stringify(h));let l=n,T={label:o,version:e,metadata_filters:s};n&&(T.input_variables=n);let P=yield u.startActiveSpan("PromptLayer.templates.get",_=>c(this,null,function*(){try{_.setAttribute("function_input",JSON.stringify({promptName:t,templateGetParams:T}));let d=yield this.templates.get(t,T);return _.setAttribute("function_output",JSON.stringify(d)),_.setStatus({code:N.SpanStatusCode.OK}),d}catch(d){throw _.setStatus({code:N.SpanStatusCode.ERROR,message:d instanceof Error?d.message:"Unknown error"}),d}finally{_.end()}}));if(!P)throw new Error("Prompt not found");let $=P.prompt_template;if(!P.llm_kwargs)throw new Error(`Prompt '${t}' does not have any LLM kwargs associated with it.`);let E=P.metadata;if(!E)throw new Error(`Prompt '${t}' does not have any metadata associated with it.`);let q=E.model;if(!q)throw new Error(`Prompt '${t}' does not have a model parameters associated with it.`);let m=q.provider,b=new Date().toISOString(),O=P.llm_kwargs,W=ee[m][$.type],U=W.function_name,k=W.stream_function,G=re[m],Z=P.provider_base_url;Z&&(O.baseURL=Z.url),O.stream=i,i&&m==="openai"&&(O.stream_options={include_usage:!0});let tt,J=yield u.startActiveSpan(`${m}.request`,_=>c(this,null,function*(){tt=_.spanContext().spanId;try{_.setAttribute("function_input",JSON.stringify({promptBlueprint:P,kwargs:O}));let d=yield G(P,O);return _.setAttribute("function_output",JSON.stringify(d)),_.setStatus({code:N.SpanStatusCode.OK}),d}catch(d){throw _.setStatus({code:N.SpanStatusCode.ERROR,message:d instanceof Error?d.message:"Unknown error"}),d}finally{_.end()}})),et=_=>u.startActiveSpan("PromptLayer._trackRequest",d=>c(this,null,function*(){try{let L=new Date().toISOString(),nt=g({function_name:U,provider_type:m,args:[],kwargs:O,tags:a,request_start_time:b,request_end_time:L,api_key:this.apiKey,metadata:s,prompt_id:P.id,prompt_version:P.version,prompt_input_variables:l,group_id:p,return_prompt_blueprint:!0,span_id:tt},_);d.setAttribute("function_input",JSON.stringify(nt));let at=yield Tt(nt);return d.setAttribute("function_output",JSON.stringify(at)),d.setStatus({code:N.SpanStatusCode.OK}),at}catch(L){throw d.setStatus({code:N.SpanStatusCode.ERROR,message:L instanceof Error?L.message:"Unknown error"}),L}finally{d.end()}}));if(i)return bt(J,et,k);let rt=yield et({request_response:J}),ot={request_id:rt.request_id,raw_response:J,prompt_blueprint:rt.prompt_blueprint};return y.setAttribute("function_output",JSON.stringify(ot)),ot}catch(h){throw y.setStatus({code:N.SpanStatusCode.ERROR,message:h instanceof Error?h.message:"Unknown error"}),h}finally{y.end()}}))})}};0&&(module.exports={PromptLayer});
|
|
2
3
|
//# sourceMappingURL=index.js.map
|