promptlayer 0.0.20 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -45,8 +45,11 @@ In the JavaScript file where you use OpenAI APIs, add the following. This allows
45
45
 
46
46
  ```js
47
47
  import BaseOpenAI from "openai";
48
- import promptlayer from "promptlayer";
48
+ import { PromptLayer } from "promptlayer";
49
49
 
50
+ const promptlayer = new PromptLayer({
51
+ apiKey: process.env.PROMPTLAYER_API_KEY,
52
+ });
50
53
  // Typescript
51
54
  const OpenAI: typeof BaseOpenAI = promptlayer.OpenAI;
52
55
  const openai = new OpenAI();
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var Q=Object.defineProperty,ne=Object.defineProperties;var se=Object.getOwnPropertyDescriptors;var H=Object.getOwnPropertySymbols;var ie=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable;var z=(e,t)=>{if(t=Symbol[e])return t;throw Error("Symbol."+e+" is not defined")};var F=(e,t,r)=>t in e?Q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,h=(e,t)=>{for(var r in t||(t={}))ie.call(t,r)&&F(e,r,t[r]);if(H)for(var r of H(t))pe.call(t,r)&&F(e,r,t[r]);return e},d=(e,t)=>ne(e,se(t));var V=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,r)=>(typeof require!="undefined"?require:t)[r]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var T=(e,t)=>{for(var r in t)Q(e,r,{get:t[r],enumerable:!0})};var c=(e,t,r)=>new Promise((o,a)=>{var n=p=>{try{i(r.next(p))}catch(s){a(s)}},l=p=>{try{i(r.throw(p))}catch(s){a(s)}},i=p=>p.done?o(p.value):Promise.resolve(p.value).then(n,l);i((r=r.apply(e,t)).next())}),k=function(e,t){this[0]=e,this[1]=t},Z=(e,t,r)=>{var o=(l,i,p,s)=>{try{var w=r[l](i),_=(i=w.value)instanceof k,y=w.done;Promise.resolve(_?i[0]:i).then(m=>_?o(l==="return"?l:"next",i[1]?{done:m.done,value:m.value}:m,p,s):p({value:m,done:y})).catch(m=>o("throw",m,p,s))}catch(m){s(m)}},a=l=>n[l]=i=>new Promise((p,s)=>o(l,i,p,s)),n={};return r=r.apply(e,t),n[Symbol.asyncIterator]=()=>n,a("next"),a("throw"),a("return"),n};var ee=(e,t,r)=>(t=e[z("asyncIterator")])?t.call(e):(e=e[z("iterator")](),t={},r=(o,a)=>(a=e[o])&&(t[o]=n=>new Promise((l,i,p)=>(n=a.call(e,n),p=n.done,Promise.resolve(n.value).then(s=>l({value:s,done:p}),i)))),r("next"),r("return"),t);var v={};T(v,{create:()=>he});var q={};T(q,{getAllPromptTemplates:()=>E,getApiKey:()=>u,getPromptTemplate:()=>j,promptLayerAllPromptTemplates:()=>$,promptLayerApiRequest:()=>A,promptLayerCreateGroup:()=>W,promptLayerGetPrompt:()=>N,promptLayerPublishPrompt:()=>G,promptLayerTrackGroup:()=>O,promptLayerTrackMetadata:()=>S,promptLayerTrackPrompt:()=>I,promptLayerTrackScore:()=>C,promptlayerApiHandler:()=>R,publishPromptTemplate:()=>x});var f="https://api.promptlayer.com",u=()=>{if(L.api_key===void 0)throw new Error("Please set your PROMPTLAYER_API_KEY environment variable or set API KEY in code using 'promptlayer.api_key = <your_api_key>' ");return L.api_key},R=e=>c(void 0,null,function*(){return e.request_response[Symbol.asyncIterator]!==void 0?ue(e.request_response,e):yield A(e)}),A=e=>c(void 0,null,function*(){try{let t=yield fetch(`${f}/track-request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=yield t.json();if(t.status!==200&&P(r,"WARNING: While logging your request, PromptLayer experienced the following error:"),r&&e.return_pl_id)return[e.request_response,r.request_id]}catch(t){console.warn(`WARNING: While logging your request PromptLayer had the following error: ${t}`)}return e.request_response}),$=e=>c(void 0,null,function*(){let t=new URL(`${f}/rest/prompts`);Object.entries(e||{}).forEach(([r,o])=>t.searchParams.append(r,o));try{let r=yield fetch(t,{method:"GET",headers:{"Content-Type":"application/json","X-API-KEY":u()}}),o=yield r.json();return r.status!==200&&console.warn(`WARNING: While fetching all prompt templates, PromptLayer had the following error: ${JSON.stringify(o)}`),o}catch(r){console.warn(`WARNING: While fetching all prompt templates, PromptLayer had the following error: ${r}`)}}),N=e=>c(void 0,null,function*(){var n,l,i;let t={prompt_name:e.prompt_name,version:(l=(n=e.version)==null?void 0:n.toString())!=null?l:"",label:(i=e.label)!=null?i:""},r=new URL(`${f}/library-get-prompt-template`);r.search=new URLSearchParams(t).toString();let o;try{o=yield fetch(r.toString(),{method:"GET",headers:{"X-API-KEY":u()}})}catch(p){throw new Error(`PromptLayer had the following error while getting your prompt: ${p}`)}let a=yield o.json();return o.status!==200&&te(a,"PromptLayer had the following error while retrieving your prompt template"),a}),G=e=>c(void 0,null,function*(){let t;try{t=yield fetch(`${f}/library-publish-prompt-template`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d(h({},e),{api_key:u()}))})}catch(o){throw new Error(`PromptLayer had the following error while publishing your prompt template: ${o}`)}let r=yield t.json();return t.status!==200&&te(r,"PromptLayer had the following error while publishing your prompt"),!0}),S=e=>c(void 0,null,function*(){try{let t=yield fetch(`${f}/library-track-metadata`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d(h({},e),{api_key:u()}))}),r=yield t.json();if(t.status!==200)return P(r,"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}),C=e=>c(void 0,null,function*(){try{let t=yield fetch(`${f}/library-track-score`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d(h({},e),{api_key:u()}))}),r=yield t.json();if(t.status!==200)return P(r,"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}),I=e=>c(void 0,null,function*(){try{let t=yield fetch(`${f}/library-track-prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d(h({},e),{api_key:u()}))}),r=yield t.json();if(t.status!==200)return P(r,"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}),O=e=>c(void 0,null,function*(){try{let t=yield fetch(`${f}/track-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d(h({},e),{api_key:u()}))}),r=yield t.json();if(t.status!==200)return P(r,"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}),W=()=>c(void 0,null,function*(){try{let e=yield fetch(`${f}/create-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:u()})}),t=yield e.json();return e.status!==200?(P(t,"WARNING: While creating a group PromptLayer had the following error"),!1):t.id}catch(e){return console.warn(`WARNING: While creating a group PromptLayer had the following error: ${e}`),!1}}),j=(e,t)=>c(void 0,null,function*(){try{let r=new URL(`${f}/prompt-templates/${e}`),o=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":u()},body:JSON.stringify(d(h({},t),{api_key:u()}))}),a=yield o.json();return o.status!==200?(P(a,"WARNING: While fetching a prompt template PromptLayer had the following error"),null):a}catch(r){return console.warn(`WARNING: While fetching a prompt template PromptLayer had the following error: ${r}`),null}}),x=e=>c(void 0,null,function*(){try{let t=yield fetch(`${f}/rest/prompt-templates`,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":u()},body:JSON.stringify({prompt_template:h({},e),prompt_version:h({},e),release_labels:e.release_labels?e.release_labels:void 0})}),r=yield t.json();return t.status===400&&P(r,"WARNING: While publishing a prompt template PromptLayer had the following error"),r}catch(t){console.warn(`WARNING: While publishing a prompt template PromptLayer had the following error: ${t}`)}}),E=e=>c(void 0,null,function*(){var t;try{let r=new URL(`${f}/prompt-templates`);Object.entries(e||{}).forEach(([n,l])=>r.searchParams.append(n,l.toString()));let o=yield fetch(r,{headers:{"Content-Type":"application/json","X-API-KEY":u()}}),a=yield o.json();return o.status!==200?(P(a,"WARNING: While fetching all prompt templates PromptLayer had the following error"),null):(t=a.items)!=null?t:[]}catch(r){return console.warn(`WARNING: While fetching all prompt templates PromptLayer had the following error: ${r}`),null}}),le=e=>{var l,i,p,s,w;let t=null,r,o={id:"",choices:[],created:Date.now(),model:"",object:"chat.completion"},a=e.at(-1);if(!a)return o;let n;for(let _ of e){let y=_.choices[0].delta;y.content&&(t=`${t||""}${y.content||""}`),y.function_call&&(r={name:`${r?r.name:""}${y.function_call.name||""}`,arguments:`${r?r.arguments:""}${y.function_call.arguments||""}`});let m=(l=y.tool_calls)==null?void 0:l[0];if(m){n=n||[];let g=n.at(-1);if(!g||m.id){n.push({id:m.id||"",type:m.type||"function",function:{name:((i=m.function)==null?void 0:i.name)||"",arguments:((p=m.function)==null?void 0:p.arguments)||""}});continue}g.function.name=`${g.function.name}${((s=m.function)==null?void 0:s.name)||""}`,g.function.arguments=`${g.function.arguments}${((w=m.function)==null?void 0:w.arguments)||""}`}}return o.choices.push({finish_reason:a.choices[0].finish_reason||"stop",index:a.choices[0].index||0,logprobs:a.choices[0].logprobs||null,message:{role:"assistant",content:t,function_call:r||void 0,tool_calls:n||void 0}}),o.id=a.id,o.model=a.model,o.created=a.created,o.system_fingerprint=a.system_fingerprint,o},ce=e=>{let t={id:"",model:"",content:[],role:"assistant",type:"message",stop_reason:"stop_sequence",stop_sequence:null,usage:{input_tokens:0,output_tokens:0}};if(!e.at(-1))return t;let o="";for(let a of e)switch(a.type){case"message_start":{t=h({},a.message);break}case"content_block_delta":a.delta.type==="text_delta"&&(o=`${o}${a.delta.text}`);case"message_delta":"usage"in a&&(t.usage.output_tokens=a.usage.output_tokens),"stop_reason"in a.delta&&(t.stop_reason=a.delta.stop_reason);default:break}return t.content.push({type:"text",text:o}),t},me=(e,t="openai.chat.completions.create")=>{if("completion"in e[0])return e.reduce((r,o)=>d(h({},o),{completion:`${r.completion}${o.completion}`}),{});if(t==="anthropic.messages.create")return ce(e);if("text"in e[0].choices[0]){let r="";for(let a of e)r=`${r}${a.choices[0].text}`;let o=structuredClone(e.at(-1));return o.choices[0].text=r,o}if("delta"in e[0].choices[0]){let r=le(e);return r.choices[0]=h(h({},r.choices[0]),r.choices[0].message),r}return""};function ue(e,t){return Z(this,null,function*(){let r=[];try{for(var n=ee(e),l,i,p;l=!(i=yield new k(n.next())).done;l=!1){let s=i.value;yield t.return_pl_id?[s,null]:s,r.push(s)}}catch(i){p=[i]}finally{try{l&&(i=n.return)&&(yield new k(i.call(n)))}finally{if(p)throw p[0]}}let o=me(r,t.function_name),a=yield new k(A(d(h({},t),{request_response:o,request_end_time:new Date().toISOString()})));if(a&&t.return_pl_id){let s=a[1];yield[r.at(-1),s]}})}var P=(e,t)=>{try{console.warn(`${t}: ${e.message}`)}catch(r){console.warn(`${t}: ${e}`)}},te=(e,t)=>{throw"message"in e?new Error(`${t}: ${e.message}`):new Error(`${t}: ${e.message}`)};var he=()=>c(void 0,null,function*(){return yield W()});var M=(e,t="",r="openai")=>{let o={construct:(a,n)=>{let l=Reflect.construct(a,n);return Object.defineProperties(l,{function_name:{value:t,writable:!0},provider:{value:r}}),new Proxy(l,o)},get:(a,n,l)=>{let i=a[n],p=`${Reflect.get(a,"function_name")}.${n.toString()}`;return typeof i=="object"?(Object.defineProperties(i,{function_name:{value:p,writable:!0},provider:{value:r}}),new Proxy(i,o)):typeof i=="function"?(...s)=>{var U,X,B,D;let w=new Date().toISOString(),_=Reflect.get(a,"provider"),y=(U=s[0])==null?void 0:U.return_pl_id,m=(X=s[0])==null?void 0:X.pl_tags;(B=s[0])==null||delete B.return_pl_id,(D=s[0])==null||delete D.pl_tags;let g=Reflect.apply(i,a,s);return g instanceof Promise?new Promise((re,oe)=>{g.then(b=>c(void 0,null,function*(){let ae=yield R({api_key:u(),provider_type:_,function_name:p,request_start_time:w,request_end_time:new Date().toISOString(),request_response:b,kwargs:s[0],return_pl_id:y,tags:m});re(ae)})).catch(b=>{oe(b)})}):g}:Reflect.get(a,n,l)}};return new Proxy(e,o)};var J={};T(J,{all:()=>fe,get:()=>ye,publish:()=>ge});var fe=e=>$(e),ye=e=>c(void 0,null,function*(){let t=yield N(e),r=t.prompt_template,o=t.metadata;return{prompt_template:r,metadata:o}}),ge=e=>{let{prompt_template:t,commit_message:r}=e;if(r&&r.length>72)throw new Error("Commit message must be less than 72 characters.");if(!(t instanceof Object))throw new Error("Please provide a JSON prompt template.");return G(e)};var Y={};T(Y,{all:()=>we,get:()=>de,publish:()=>Pe});var de=(e,t)=>j(e,t),Pe=e=>x(e),we=e=>E(e);var K={};T(K,{group:()=>be,metadata:()=>_e,prompt:()=>ke,score:()=>Te});var _e=e=>{if(!(e.metadata instanceof Object))throw new Error("Please provide a dictionary of metadata.");for(let[t,r]of Object.entries(e.metadata))if(typeof t!="string"||typeof r!="string")throw new Error("Please provide a dictionary of metadata with key value pair of strings.");return S(e)},Te=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 C(e)},ke=e=>{if(!(e.prompt_input_variables instanceof Object))throw new Error("Prompt template input variable dictionary not provided.");return I(e)},be=e=>O(e);var L=new Proxy({OpenAI:{},Anthropic:{},api_key:process.env.PROMPTLAYER_API_KEY,utils:q,track:K,groups:v,prompts:J,templates:Y},{get:(e,t,r)=>{if(t==="Anthropic")try{let o=V("@anthropic-ai/sdk").default;return M(o,"anthropic","anthropic")}catch(o){console.error("To use the Anthropic module, you must install the @anthropic-ai/sdk package.")}if(t==="OpenAI")try{let o=V("openai").default;return M(o,"openai","openai")}catch(o){console.error("To use the OpenAI module, you must install the @openai/api package.")}return Reflect.get(e,t,r)}});export{L as promptlayer};
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};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};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/groups.ts","../../src/utils.ts","../../src/promptlayer.ts","../../src/prompts.ts","../../src/templates.ts","../../src/track.ts","../../src/index.ts"],"sourcesContent":["import { promptLayerCreateGroup } from \"@/utils\";\n\nconst create = async (): Promise<number | boolean> =>\n await promptLayerCreateGroup();\n\nexport { create };\n","import { promptlayer } from \"@/index\";\nimport {\n GetPromptTemplate,\n GetPromptTemplateParams,\n GetPromptTemplateResponse,\n LegacyPublishPromptTemplate,\n ListPromptTemplatesResponse,\n Pagination,\n PublishPromptTemplate,\n PublishPromptTemplateResponse,\n TrackGroup,\n TrackMetadata,\n TrackPrompt,\n TrackRequest,\n TrackScore,\n} from \"@/types\";\nimport { Message, MessageStreamEvent } from \"@anthropic-ai/sdk/resources\";\nimport { ChatCompletion, ChatCompletionChunk } from \"openai/resources\";\n\nconst URL_API_PROMPTLAYER = \"https://api.promptlayer.com\";\n\nconst getApiKey = () => {\n if (promptlayer.api_key === undefined) {\n throw new Error(\n \"Please set your PROMPTLAYER_API_KEY environment variable or set API KEY in code using 'promptlayer.api_key = <your_api_key>' \"\n );\n } else {\n return promptlayer.api_key;\n }\n};\n\nconst promptlayerApiHandler = async <Item>(\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(body.request_response, body);\n }\n return await promptLayerApiRequest(body);\n};\n\nconst promptLayerApiRequest = 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 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 promptLayerAllPromptTemplates = async (params?: Pagination) => {\n const url = new URL(`${URL_API_PROMPTLAYER}/rest/prompts`);\n Object.entries(params || {}).forEach(([key, value]) =>\n url.searchParams.append(key, value)\n );\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": getApiKey(),\n },\n });\n const data = await response.json();\n if (response.status !== 200) {\n console.warn(\n `WARNING: While fetching all prompt templates, PromptLayer had the following error: ${JSON.stringify(\n data\n )}`\n );\n }\n return data;\n } catch (e) {\n console.warn(\n `WARNING: While fetching all prompt templates, PromptLayer had the following error: ${e}`\n );\n }\n};\n\n/**\n * Get a prompt from the PromptLayer library\n * @param prompt_name name of the prompt to get\n * @param api_key your api key\n * @param version version of the prompt to get, None for latest\n * @param label The release label of a prompt you want to get. Setting this will supercede version\n */\nconst promptLayerGetPrompt = async (body: GetPromptTemplate) => {\n const params: Record<string, string> = {\n prompt_name: body.prompt_name,\n version: body.version?.toString() ?? \"\",\n label: body.label ?? \"\",\n };\n const url = new URL(`${URL_API_PROMPTLAYER}/library-get-prompt-template`);\n url.search = new URLSearchParams(params).toString();\n let response: Response;\n try {\n response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"X-API-KEY\": getApiKey(),\n },\n });\n } catch (e) {\n throw new Error(\n `PromptLayer had the following error while getting your prompt: ${e}`\n );\n }\n const data = await response.json();\n if (response.status !== 200) {\n throwOnBadResponse(\n data,\n `PromptLayer had the following error while retrieving your prompt template`\n );\n }\n return data;\n};\n\nconst promptLayerPublishPrompt = async (\n body: LegacyPublishPromptTemplate\n): Promise<boolean> => {\n let response: Response;\n try {\n response = await fetch(\n `${URL_API_PROMPTLAYER}/library-publish-prompt-template`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...body,\n api_key: getApiKey(),\n }),\n }\n );\n } catch (e) {\n throw new Error(\n `PromptLayer had the following error while publishing your prompt template: ${e}`\n );\n }\n const data = await response.json();\n if (response.status !== 200) {\n throwOnBadResponse(\n data,\n `PromptLayer had the following error while publishing your prompt`\n );\n }\n return true;\n};\n\nconst promptLayerTrackMetadata = async (\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: getApiKey(),\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 (body: TrackScore): 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: getApiKey(),\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 (body: TrackPrompt): 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: getApiKey(),\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 (body: TrackGroup): 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: getApiKey(),\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 (): 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: getApiKey(),\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 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\": getApiKey(),\n },\n body: JSON.stringify({ ...params, api_key: getApiKey() }),\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 (body: PublishPromptTemplate) => {\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\": getApiKey(),\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 (params?: Partial<Pagination>) => {\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\": getApiKey(),\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 mapChatCompletionChunk = (\n results: ChatCompletionChunk[]\n): 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 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: lastResult.choices[0].finish_reason || \"stop\",\n index: lastResult.choices[0].index || 0,\n logprobs: lastResult.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 return response;\n};\n\nconst mapMessageStreamEvent = (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 mapMessageStreamEvent(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 = mapChatCompletionChunk(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 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({\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 throwOnBadResponse = (request_response: any, main_message: string) => {\n if (\"message\" in request_response) {\n throw new Error(`${main_message}: ${request_response.message}`);\n }\n throw new Error(`${main_message}: ${request_response.message}`);\n};\n\nexport {\n getAllPromptTemplates,\n getApiKey,\n getPromptTemplate,\n promptLayerAllPromptTemplates,\n promptLayerApiRequest,\n promptLayerCreateGroup,\n promptLayerGetPrompt,\n promptLayerPublishPrompt,\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n promptlayerApiHandler,\n publishPromptTemplate,\n};\n","import { getApiKey, promptlayerApiHandler } from \"@/utils\";\n\nexport const promptLayerBase = (\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({\n api_key: getApiKey(),\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 GetPromptTemplate,\n LegacyPromptTemplate,\n LegacyPublishPromptTemplate,\n Pagination,\n} from \"@/types\";\nimport {\n promptLayerAllPromptTemplates,\n promptLayerGetPrompt,\n promptLayerPublishPrompt,\n} from \"@/utils\";\n\n/**\n * @description List all prompts on PromptLayer.\n * @param params\n */\nexport const all = (params?: Pagination) =>\n promptLayerAllPromptTemplates(params);\n/**\n * Get a prompt template from PromptLayer.\n */\nconst getPrompt = async (\n params: GetPromptTemplate\n): Promise<LegacyPromptTemplate> => {\n const prompt = await promptLayerGetPrompt(params);\n const prompt_template = prompt[\"prompt_template\"];\n const metadata = prompt[\"metadata\"];\n return {\n prompt_template,\n metadata,\n };\n};\n\nconst publishPrompt = (body: LegacyPublishPromptTemplate): Promise<boolean> => {\n const { prompt_template, commit_message } = body;\n if (commit_message && commit_message.length > 72) {\n throw new Error(\"Commit message must be less than 72 characters.\");\n }\n if (!(prompt_template instanceof Object)) {\n throw new Error(\"Please provide a JSON prompt template.\");\n }\n return promptLayerPublishPrompt(body);\n};\n\nexport { getPrompt as get, publishPrompt as publish };\n","import {\n GetPromptTemplateParams,\n Pagination,\n PublishPromptTemplate,\n} from \"@/types\";\nimport {\n getAllPromptTemplates,\n getPromptTemplate,\n publishPromptTemplate,\n} from \"@/utils\";\n\nexport const get = (\n promptName: string,\n params?: Partial<GetPromptTemplateParams>\n) => getPromptTemplate(promptName, params);\n\nexport const publish = (body: PublishPromptTemplate) =>\n publishPromptTemplate(body);\n\nexport const all = (params?: Pagination) => getAllPromptTemplates(params);\n","import { TrackGroup, TrackMetadata, TrackPrompt, TrackScore } from \"@/types\";\nimport {\n promptLayerTrackGroup,\n promptLayerTrackMetadata,\n promptLayerTrackPrompt,\n promptLayerTrackScore,\n} from \"@/utils\";\n\nconst metadata = (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(body);\n};\n\nconst score = (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(body);\n};\n\nconst prompt = (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(body);\n};\n\nconst group = (body: TrackGroup) => promptLayerTrackGroup(body);\n\nexport { group, metadata, prompt, score };\n","import * as groups from \"@/groups\";\nimport { promptLayerBase } from \"@/promptlayer\";\nimport * as prompts from \"@/prompts\";\nimport * as templates from \"@/templates\";\nimport * as track from \"@/track\";\nimport * as utils from \"@/utils\";\n\nexport const promptlayer = new Proxy<{\n OpenAI: any;\n Anthropic: any;\n api_key: string | undefined;\n utils: typeof utils;\n track: typeof track;\n groups: typeof groups;\n prompts: typeof prompts;\n templates: typeof templates;\n}>(\n {\n OpenAI: {},\n Anthropic: {},\n api_key: process.env.PROMPTLAYER_API_KEY,\n utils,\n track,\n groups,\n prompts,\n templates,\n },\n {\n get: (target, prop, receiver) => {\n if (prop === \"Anthropic\") {\n try {\n const module = require(\"@anthropic-ai/sdk\").default;\n return promptLayerBase(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 if (prop === \"OpenAI\") {\n try {\n const module = require(\"openai\").default;\n return promptLayerBase(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 return Reflect.get(target, prop, receiver);\n },\n }\n);\n"],"mappings":"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","names":["groups_exports","__export","create","utils_exports","__export","getAllPromptTemplates","getApiKey","getPromptTemplate","promptLayerAllPromptTemplates","promptLayerApiRequest","promptLayerCreateGroup","promptLayerGetPrompt","promptLayerPublishPrompt","promptLayerTrackGroup","promptLayerTrackMetadata","promptLayerTrackPrompt","promptLayerTrackScore","promptlayerApiHandler","publishPromptTemplate","URL_API_PROMPTLAYER","getApiKey","promptlayer","promptlayerApiHandler","body","__async","proxyGenerator","promptLayerApiRequest","response","data","warnOnBadResponse","e","promptLayerAllPromptTemplates","params","url","key","value","promptLayerGetPrompt","_a","_b","_c","throwOnBadResponse","promptLayerPublishPrompt","__spreadProps","__spreadValues","promptLayerTrackMetadata","promptLayerTrackScore","promptLayerTrackPrompt","promptLayerTrackGroup","promptLayerCreateGroup","getPromptTemplate","promptName","publishPromptTemplate","getAllPromptTemplates","mapChatCompletionChunk","results","_d","_e","content","functionCall","lastResult","toolCalls","result","delta","toolCall","lastToolCall","mapMessageStreamEvent","cleaned_result","function_name","prev","current","final_result","generator","__asyncGenerator","iter","__forAwait","more","temp","error","__await","request_response","request_id","main_message","create","__async","promptLayerCreateGroup","promptLayerBase","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","getApiKey","error","prompts_exports","__export","all","getPrompt","publishPrompt","all","params","promptLayerAllPromptTemplates","getPrompt","__async","prompt","promptLayerGetPrompt","prompt_template","metadata","publishPrompt","body","commit_message","promptLayerPublishPrompt","templates_exports","__export","all","get","publish","get","promptName","params","getPromptTemplate","publish","body","publishPromptTemplate","all","getAllPromptTemplates","track_exports","__export","group","metadata","prompt","score","metadata","body","key","value","promptLayerTrackMetadata","score","promptLayerTrackScore","prompt","promptLayerTrackPrompt","group","promptLayerTrackGroup","promptlayer","utils_exports","track_exports","groups_exports","prompts_exports","templates_exports","target","prop","receiver","module","promptLayerBase","e"]}
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 };\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":"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","names":["URL_API_PROMPTLAYER","promptlayerApiHandler","apiKey","body","__async","proxyGenerator","promptLayerApiRequest","response","data","warnOnBadResponse","e","promptLayerTrackMetadata","__spreadProps","__spreadValues","promptLayerTrackScore","promptLayerTrackPrompt","promptLayerTrackGroup","promptLayerCreateGroup","getPromptTemplate","promptName","params","url","publishPromptTemplate","getAllPromptTemplates","_a","key","value","openaiStreamChat","results","_b","_c","_d","_e","content","functionCall","lastResult","toolCalls","result","delta","toolCall","lastToolCall","anthropicStreamMessage","cleaned_result","function_name","prev","current","final_result","generator","__asyncGenerator","iter","__forAwait","more","temp","error","__await","request_response","request_id","main_message","trackRequest","openaiStreamCompletion","text","anthropicStreamCompletion","completion","streamResponse","afterStream","mapResults","openaiChatRequest","client","kwargs","openaiCompletionsRequest","MAP_TYPE_TO_OPENAI_FUNCTION","openaiRequest","promptBlueprint","OpenAI","requestToMake","anthropicChatRequest","anthropicCompletionsRequest","MAP_TYPE_TO_ANTHROPIC_FUNCTION","anthropicRequest","Anthropic","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"]}
package/dist/index.d.mts CHANGED
@@ -1,44 +1,9 @@
1
- declare const create: () => Promise<number | boolean>;
2
-
3
- declare const groups_create: typeof create;
4
- declare namespace groups {
5
- export {
6
- groups_create as create,
7
- };
1
+ declare class GroupManager {
2
+ apiKey: string;
3
+ constructor(apiKey: string);
4
+ create: () => Promise<number | boolean>;
8
5
  }
9
6
 
10
- interface GetPromptTemplate {
11
- prompt_name: string;
12
- version?: number;
13
- label?: string;
14
- }
15
- interface LegacyPromptTemplate {
16
- prompt_template: any;
17
- metadata: any;
18
- }
19
- interface LegacyPublishPromptTemplate {
20
- prompt_name: string;
21
- prompt_template: any;
22
- commit_message?: string;
23
- tags?: string[];
24
- metadata?: any;
25
- }
26
- interface TrackRequest {
27
- api_key: string;
28
- provider_type?: string;
29
- function_name: string;
30
- args?: unknown[];
31
- kwargs?: Record<string, unknown>;
32
- request_end_time: string;
33
- request_start_time: string;
34
- prompt_id?: number;
35
- prompt_version?: number;
36
- metadata?: Record<string, string>;
37
- tags?: string[];
38
- request_response?: Record<string, unknown>;
39
- prompt_input_variables?: Record<string, string> | string[];
40
- [k: string]: unknown;
41
- }
42
7
  interface TrackMetadata {
43
8
  request_id: number;
44
9
  metadata: Record<string, string>;
@@ -65,8 +30,8 @@ interface Pagination {
65
30
  interface GetPromptTemplateParams {
66
31
  version?: number;
67
32
  label?: string;
68
- provider: string;
69
- input_variables: Record<string, string>;
33
+ provider?: string;
34
+ input_variables?: Record<string, string>;
70
35
  }
71
36
  declare const templateFormat: readonly ["f-string", "jinja2"];
72
37
  type TemplateFormat = (typeof templateFormat)[number];
@@ -183,6 +148,12 @@ type PromptVersion = {
183
148
  type PublishPromptTemplate = BasePromptTemplate & PromptVersion & {
184
149
  release_labels?: string[];
185
150
  };
151
+ interface ProviderBaseURL {
152
+ id: number;
153
+ name: string;
154
+ provider: string;
155
+ url: string;
156
+ }
186
157
  interface BasePromptTemplateResponse {
187
158
  id: number;
188
159
  prompt_name: string;
@@ -190,6 +161,7 @@ interface BasePromptTemplateResponse {
190
161
  prompt_template: PromptTemplate;
191
162
  commit_message?: string;
192
163
  metadata?: Metadata;
164
+ provider_base_url?: ProviderBaseURL;
193
165
  }
194
166
  interface PublishPromptTemplateResponse extends BasePromptTemplateResponse {
195
167
  }
@@ -200,125 +172,54 @@ interface GetPromptTemplateResponse extends BasePromptTemplateResponse {
200
172
  interface ListPromptTemplatesResponse extends BasePromptTemplateResponse {
201
173
  version: number;
202
174
  }
203
-
204
- /**
205
- * @description List all prompts on PromptLayer.
206
- * @param params
207
- */
208
- declare const all$1: (params?: Pagination) => Promise<any>;
209
- /**
210
- * Get a prompt template from PromptLayer.
211
- */
212
- declare const getPrompt: (params: GetPromptTemplate) => Promise<LegacyPromptTemplate>;
213
- declare const publishPrompt: (body: LegacyPublishPromptTemplate) => Promise<boolean>;
214
-
215
- declare namespace prompts {
216
- export {
217
- all$1 as all,
218
- getPrompt as get,
219
- publishPrompt as publish,
220
- };
175
+ interface RunRequest {
176
+ promptName: string;
177
+ tags?: string[];
178
+ metadata?: Record<string, string>;
179
+ groupId?: number;
180
+ stream?: boolean;
181
+ promptVersion?: number;
182
+ promptReleaseLabel?: string;
183
+ inputVariables?: Record<string, string>;
221
184
  }
222
185
 
223
- declare const get: (promptName: string, params?: Partial<GetPromptTemplateParams>) => Promise<GetPromptTemplateResponse | null>;
224
- declare const publish: (body: PublishPromptTemplate) => Promise<PublishPromptTemplateResponse | undefined>;
225
- declare const all: (params?: Pagination) => Promise<ListPromptTemplatesResponse[] | null>;
226
-
227
- declare const templates_all: typeof all;
228
- declare const templates_get: typeof get;
229
- declare const templates_publish: typeof publish;
230
- declare namespace templates {
231
- export {
232
- templates_all as all,
233
- templates_get as get,
234
- templates_publish as publish,
235
- };
186
+ declare class TemplateManager {
187
+ apiKey: string;
188
+ constructor(apiKey: string);
189
+ get: (promptName: string, params?: Partial<GetPromptTemplateParams>) => Promise<GetPromptTemplateResponse | null>;
190
+ publish: (body: PublishPromptTemplate) => Promise<PublishPromptTemplateResponse | undefined>;
191
+ all: (params?: Pagination) => Promise<ListPromptTemplatesResponse[] | null>;
236
192
  }
237
193
 
238
- declare const metadata: (body: TrackMetadata) => Promise<boolean>;
239
- declare const score: (body: TrackScore) => Promise<boolean>;
240
- declare const prompt: (body: TrackPrompt) => Promise<boolean>;
241
- declare const group: (body: TrackGroup) => Promise<boolean>;
242
-
243
- declare const track_group: typeof group;
244
- declare const track_metadata: typeof metadata;
245
- declare const track_prompt: typeof prompt;
246
- declare const track_score: typeof score;
247
- declare namespace track {
248
- export {
249
- track_group as group,
250
- track_metadata as metadata,
251
- track_prompt as prompt,
252
- track_score as score,
253
- };
194
+ declare class TrackManager {
195
+ apiKey: string;
196
+ constructor(apiKey: string);
197
+ group: (body: TrackGroup) => Promise<boolean>;
198
+ metadata: (body: TrackMetadata) => Promise<boolean>;
199
+ prompt: (body: TrackPrompt) => Promise<boolean>;
200
+ score: (body: TrackScore) => Promise<boolean>;
254
201
  }
255
202
 
256
- declare const getApiKey: () => string;
257
- declare const promptlayerApiHandler: <Item>(body: TrackRequest & {
258
- request_response: any;
259
- }) => Promise<any[] | Record<string, unknown> | AsyncGenerator<unknown, void, unknown> | undefined>;
260
- declare const promptLayerApiRequest: (body: TrackRequest) => Promise<any[] | Record<string, unknown> | undefined>;
261
- declare const promptLayerAllPromptTemplates: (params?: Pagination) => Promise<any>;
262
- /**
263
- * Get a prompt from the PromptLayer library
264
- * @param prompt_name name of the prompt to get
265
- * @param api_key your api key
266
- * @param version version of the prompt to get, None for latest
267
- * @param label The release label of a prompt you want to get. Setting this will supercede version
268
- */
269
- declare const promptLayerGetPrompt: (body: GetPromptTemplate) => Promise<any>;
270
- declare const promptLayerPublishPrompt: (body: LegacyPublishPromptTemplate) => Promise<boolean>;
271
- declare const promptLayerTrackMetadata: (body: TrackMetadata) => Promise<boolean>;
272
- declare const promptLayerTrackScore: (body: TrackScore) => Promise<boolean>;
273
- declare const promptLayerTrackPrompt: (body: TrackPrompt) => Promise<boolean>;
274
- declare const promptLayerTrackGroup: (body: TrackGroup) => Promise<boolean>;
275
- declare const promptLayerCreateGroup: () => Promise<number | boolean>;
276
- declare const getPromptTemplate: (promptName: string, params?: Partial<GetPromptTemplateParams>) => Promise<GetPromptTemplateResponse | null>;
277
- declare const publishPromptTemplate: (body: PublishPromptTemplate) => Promise<PublishPromptTemplateResponse | undefined>;
278
- declare const getAllPromptTemplates: (params?: Partial<Pagination>) => Promise<ListPromptTemplatesResponse[] | null>;
279
-
280
- declare const utils_getAllPromptTemplates: typeof getAllPromptTemplates;
281
- declare const utils_getApiKey: typeof getApiKey;
282
- declare const utils_getPromptTemplate: typeof getPromptTemplate;
283
- declare const utils_promptLayerAllPromptTemplates: typeof promptLayerAllPromptTemplates;
284
- declare const utils_promptLayerApiRequest: typeof promptLayerApiRequest;
285
- declare const utils_promptLayerCreateGroup: typeof promptLayerCreateGroup;
286
- declare const utils_promptLayerGetPrompt: typeof promptLayerGetPrompt;
287
- declare const utils_promptLayerPublishPrompt: typeof promptLayerPublishPrompt;
288
- declare const utils_promptLayerTrackGroup: typeof promptLayerTrackGroup;
289
- declare const utils_promptLayerTrackMetadata: typeof promptLayerTrackMetadata;
290
- declare const utils_promptLayerTrackPrompt: typeof promptLayerTrackPrompt;
291
- declare const utils_promptLayerTrackScore: typeof promptLayerTrackScore;
292
- declare const utils_promptlayerApiHandler: typeof promptlayerApiHandler;
293
- declare const utils_publishPromptTemplate: typeof publishPromptTemplate;
294
- declare namespace utils {
295
- export {
296
- utils_getAllPromptTemplates as getAllPromptTemplates,
297
- utils_getApiKey as getApiKey,
298
- utils_getPromptTemplate as getPromptTemplate,
299
- utils_promptLayerAllPromptTemplates as promptLayerAllPromptTemplates,
300
- utils_promptLayerApiRequest as promptLayerApiRequest,
301
- utils_promptLayerCreateGroup as promptLayerCreateGroup,
302
- utils_promptLayerGetPrompt as promptLayerGetPrompt,
303
- utils_promptLayerPublishPrompt as promptLayerPublishPrompt,
304
- utils_promptLayerTrackGroup as promptLayerTrackGroup,
305
- utils_promptLayerTrackMetadata as promptLayerTrackMetadata,
306
- utils_promptLayerTrackPrompt as promptLayerTrackPrompt,
307
- utils_promptLayerTrackScore as promptLayerTrackScore,
308
- utils_promptlayerApiHandler as promptlayerApiHandler,
309
- utils_publishPromptTemplate as publishPromptTemplate,
310
- };
203
+ interface ClientOptions {
204
+ apiKey?: string;
205
+ }
206
+ declare class PromptLayer {
207
+ apiKey: string;
208
+ templates: TemplateManager;
209
+ group: GroupManager;
210
+ track: TrackManager;
211
+ constructor({ apiKey, }?: ClientOptions);
212
+ get OpenAI(): any;
213
+ get Anthropic(): any;
214
+ run({ promptName, promptVersion, promptReleaseLabel, inputVariables, tags, metadata, groupId, stream, }: RunRequest): Promise<AsyncGenerator<{
215
+ request_id: number | null;
216
+ raw_response: any;
217
+ prompt_blueprint: any;
218
+ }, void, unknown> | {
219
+ request_id: any;
220
+ raw_response: any;
221
+ prompt_blueprint: any;
222
+ }>;
311
223
  }
312
224
 
313
- declare const promptlayer: {
314
- OpenAI: any;
315
- Anthropic: any;
316
- api_key: string | undefined;
317
- utils: typeof utils;
318
- track: typeof track;
319
- groups: typeof groups;
320
- prompts: typeof prompts;
321
- templates: typeof templates;
322
- };
323
-
324
- export { promptlayer };
225
+ export { ClientOptions, PromptLayer };