litellm/ui/litellm-dashboard/out/_next/static/chunks/app/page-dd9979efc21426c8.js
2024-04-22 07:23:22 -07:00

1 line
No EOL
100 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{20661:function(e,l,t){Promise.resolve().then(t.bind(t,47158))},47158:function(e,l,t){"use strict";t.r(l),t.d(l,{default:function(){return ld}});var s,a,r=t(3827),n=t(64090),o=t(47907),i=t(8792),c=t(40491),d=t(65270),m=e=>{let{userID:l,userRole:t,userEmail:s,showSSOBanner:a}=e;console.log("User ID:",l),console.log("userEmail:",s),console.log("showSSOBanner:",a);let n=[{key:"1",label:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("p",{children:["Role: ",t]}),(0,r.jsxs)("p",{children:["ID: ",l]})]})}];return(0,r.jsxs)("nav",{className:"left-0 right-0 top-0 flex justify-between items-center h-12 mb-4",children:[(0,r.jsx)("div",{className:"text-left my-2 absolute top-0 left-0",children:(0,r.jsx)("div",{className:"flex flex-col items-center",children:(0,r.jsx)(i.default,{href:"/",children:(0,r.jsx)("button",{className:"text-gray-800 text-2xl py-1 rounded text-center",children:(0,r.jsx)("img",{src:"/get_image",width:200,height:200,alt:"LiteLLM Brand",className:"mr-2"})})})})}),(0,r.jsxs)("div",{className:"text-right mx-4 my-2 absolute top-0 right-0 flex items-center justify-end space-x-2",children:[a?(0,r.jsx)("div",{style:{padding:"6px",borderRadius:"8px"},children:(0,r.jsx)("a",{href:"https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat",target:"_blank",style:{fontSize:"14px",textDecoration:"underline"},children:"Request hosted proxy"})}):null,(0,r.jsx)("div",{style:{border:"1px solid #391085",padding:"6px",borderRadius:"8px"},children:(0,r.jsx)(c.Z,{menu:{items:n},children:(0,r.jsx)(d.Z,{children:s})})})]})]})},h=t(80588);let u=async()=>{try{let e=await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"),l=await e.json();return console.log("received data: ".concat(l)),l}catch(e){throw console.error("Failed to get model cost map:",e),e}},x=async(e,l)=>{try{let t=await fetch("/model/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw h.ZP.error("Failed to create key: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),h.ZP.success("Model created successfully. Wait 60s and refresh on 'All Models' page"),s}catch(e){throw console.error("Failed to create key:",e),e}},p=async(e,l)=>{console.log("model_id in model delete call: ".concat(l));try{let t=await fetch("/model/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:l})});if(!t.ok){let e=await t.text();throw h.ZP.error("Failed to create key: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),h.ZP.success("Model deleted successfully. Restart server to see this."),s}catch(e){throw console.error("Failed to create key:",e),e}},j=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw h.ZP.error("Failed to parse metadata: "+e,20),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/key/generate",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw h.ZP.error("Failed to create key: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},g=async(e,l,t)=>{try{if(console.log("Form Values in keyCreateCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw h.ZP.error("Failed to parse metadata: "+e,20),Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",t);let s=await fetch("/user/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:l,...t})});if(!s.ok){let e=await s.text();throw h.ZP.error("Failed to create key: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},y=async(e,l)=>{try{console.log("in keyDeleteCall:",l);let t=await fetch("/key/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[l]})});if(!t.ok){let e=await t.text();throw h.ZP.error("Failed to delete key: "+e,20),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},Z=async(e,l)=>{try{console.log("in teamDeleteCall:",l);let t=await fetch("/team/delete",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[l]})});if(!t.ok){let e=await t.text();throw h.ZP.error("Failed to delete team: "+e,20),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to delete key:",e),e}},f=async function(e,l,t){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4?arguments[4]:void 0,r=arguments.length>5?arguments[5]:void 0;try{let n="/user/info";"App Owner"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),"App User"==t&&l&&(n="".concat(n,"?user_id=").concat(l)),console.log("in userInfoCall viewAll=",s),s&&r&&null!=a&&void 0!=a&&(n="".concat(n,"?view_all=true&page=").concat(a,"&page_size=").concat(r));let o=await fetch(n,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let i=await o.json();return console.log("API Response:",i),i}catch(e){throw console.error("Failed to create key:",e),e}},w=async e=>{try{let l=await fetch("/global/spend",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e,20),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},b=async(e,l,t)=>{try{let l=await fetch("/v2/model/info",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let t=await l.json();return console.log("modelInfoCall:",t),t}catch(e){throw console.error("Failed to create key:",e),e}},_=async(e,l,t)=>{try{let l=await fetch("/model/metrics",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e,20),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},k=async(e,l,t)=>{try{let l=await fetch("/models",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e,20),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},v=async(e,l)=>{try{let t="/global/spend/logs";console.log("in keySpendLogsCall:",t);let s=await fetch("".concat(t,"?api_key=").concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let a=await s.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},S=async e=>{try{let l="/global/spend/teams";console.log("in teamSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let l="/global/spend/tags";console.log("in tagsSpendLogsCall:",l);let t=await fetch("".concat(l),{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,l,t,s,a,r)=>{try{console.log("user role in spend logs call: ".concat(t));let l="/spend/logs";l="App Owner"==t?"".concat(l,"?user_id=").concat(s,"&start_date=").concat(a,"&end_date=").concat(r):"".concat(l,"?start_date=").concat(a,"&end_date=").concat(r);let n=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let o=await n.json();return console.log(o),o}catch(e){throw console.error("Failed to create key:",e),e}},I=async e=>{try{let l=await fetch("/global/spend/logs",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},C=async e=>{try{let l=await fetch("/global/spend/keys?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},P=async(e,l)=>{try{l&&JSON.stringify({api_key:l});let t={method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}};l&&(t.body=JSON.stringify({api_key:l}));let s=await fetch("/global/spend/end_users",t);if(!s.ok){let e=await s.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let a=await s.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},T=async e=>{try{let l=await fetch("/global/spend/models?limit=5",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let t=await l.json();return console.log(t),t}catch(e){throw console.error("Failed to create key:",e),e}},E=async(e,l)=>{try{let t=await fetch("/v2/key/info",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:l})});if(!t.ok){let e=await t.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},O=async e=>{try{let l="/user/get_requests";console.log("in userGetRequesedtModelsCall:",l);let t=await fetch(l,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!t.ok){let e=await t.text();throw h.ZP.error("Failed to delete key: "+e,20),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to get requested models:",e),e}},F=async(e,l)=>{try{let t="/user/get_users?role=".concat(l);console.log("in userGetAllUsersCall:",t);let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw h.ZP.error("Failed to delete key: "+e,20),Error("Network response was not ok")}let a=await s.json();return console.log(a),a}catch(e){throw console.error("Failed to get requested models:",e),e}},M=async(e,l)=>{try{console.log("Form Values in teamCreateCall:",l);let t=await fetch("/team/new",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw h.ZP.error("Failed to create key: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("API Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,l)=>{try{console.log("Form Values in keyUpdateCall:",l);let t=await fetch("/key/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw h.ZP.error("Failed to update key: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update key Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},L=async(e,l)=>{try{console.log("Form Values in teamUpateCall:",l);let t=await fetch("/team/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw h.ZP.error("Failed to update team: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let s=await t.json();return console.log("Update Team Response:",s),s}catch(e){throw console.error("Failed to create key:",e),e}},U=async(e,l,t)=>{try{console.log("Form Values in teamMemberAddCall:",t);let s=await fetch("/team/member_add",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:l,member:t})});if(!s.ok){let e=await s.text();throw h.ZP.error("Failed to create key: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let a=await s.json();return console.log("API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},D=async(e,l,t)=>{try{console.log("Form Values in userUpdateUserCall:",l);let s={...l};null!==t&&(s.user_role=t),s=JSON.stringify(s);let a=await fetch("/user/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:s});if(!a.ok){let e=await a.text();throw h.ZP.error("Failed to create key: "+e,20),console.error("Error response from the server:",e),Error("Network response was not ok")}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,l)=>{try{let t=await fetch("/global/predict/spend/logs",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({data:l})});if(!t.ok){let e=await t.text();throw h.ZP.error(e,20),Error("Network response was not ok")}let s=await t.json();return console.log(s),s}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,l)=>{try{let t="/health/services?service=".concat(l);console.log("Checking Slack Budget Alerts service health");let s=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!s.ok){let e=await s.text();throw h.ZP.error("Failed ".concat(l," service health check ")+e),Error(e)}let a=await s.json();return h.ZP.success("Test request to ".concat(l," made - check logs on ").concat(l," dashboard!")),a}catch(e){throw console.error("Failed to perform health check:",e),e}},q=async(e,l,t)=>{try{let l=await fetch("/get/config/callbacks",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e,20),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},V=async(e,l)=>{try{let t=await fetch("/config/update",{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...l})});if(!t.ok){let e=await t.text();throw h.ZP.error(e,20),Error("Network response was not ok")}return await t.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},K=async e=>{try{let l=await fetch("/health",{method:"GET",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw h.ZP.error(e),Error("Network response was not ok")}return await l.json()}catch(e){throw console.error("Failed to call /health:",e),e}};var G=t(10384),J=t(46453),W=t(2179),Y=t(26780),$=t(15595),H=t(6698),X=t(71801),Q=t(42440),ee=t(42308),el=t(50670),et=t(81583),es=t(99129),ea=t(44839),er=t(88707),en=t(1861);let{Option:eo}=el.default;var ei=e=>{let{userID:l,team:t,userRole:s,accessToken:a,data:o,setData:i}=e,[c]=et.Z.useForm(),[d,m]=(0,n.useState)(!1),[u,x]=(0,n.useState)(null),[p,g]=(0,n.useState)(null),[y,Z]=(0,n.useState)([]),f=()=>{m(!1),c.resetFields()},w=()=>{m(!1),x(null),c.resetFields()};(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===s)return;if(null!==a){let e=(await k(a,l,s)).data.map(e=>e.id);console.log("available_model_names:",e),Z(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,s]);let b=async e=>{try{h.ZP.info("Making API Call"),m(!0);let t=await j(a,l,e);console.log("key create Response:",t),i(e=>e?[...e,t]:[t]),x(t.key),g(t.soft_budget),h.ZP.success("API Key Created"),c.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the key:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(W.Z,{className:"mx-auto",onClick:()=>m(!0),children:"+ Create New Key"}),(0,r.jsx)(es.Z,{title:"Create Key",visible:d,width:800,footer:null,onOk:f,onCancel:w,children:(0,r.jsxs)(et.Z,{form:c,onFinish:b,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:["App Owner"===s||"Admin"===s?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,r.jsx)(ea.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,r.jsx)(et.Z.Item,{label:"Models",name:"models",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsxs)(el.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,r.jsx)(eo,{value:"all-team-models",children:"All Team Models"},"all-team-models"),t&&t.models?t.models.includes("all-proxy-models")?y.map(e=>(0,r.jsx)(eo,{value:e,children:e},e)):t.models.map(e=>(0,r.jsx)(eo,{value:e,children:e},e)):y.map(e=>(0,r.jsx)(eo,{value:e,children:e},e))]})}),(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,r.jsx)(er.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,r.jsxs)(el.default,{defaultValue:null,placeholder:"n/a",children:[(0,r.jsx)(el.default.Option,{value:"24h",children:"daily"}),(0,r.jsx)(el.default.Option,{value:"30d",children:"monthly"})]})}),(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,r.jsx)(er.Z,{step:1,width:400})}),(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,r.jsx)(er.Z,{step:1,width:400})}),(0,r.jsx)(et.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(ea.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"Team ID",name:"team_id",hidden:!0,initialValue:t?t.team_id:null,valuePropName:"team_id",className:"mt-8",children:(0,r.jsx)(ea.Z,{value:t?t.team_alias:"",disabled:!0})}),(0,r.jsx)(et.Z.Item,{label:"Models",name:"models",className:"mb-12",rules:[{required:!0,message:"Please select a model"}],help:"required",children:(0,r.jsxs)(el.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},onChange:e=>{e.includes("all-team-models")&&c.setFieldsValue({models:["all-team-models"]})},children:[(0,r.jsx)(eo,{value:"all-team-models",children:"All Team Models"},"all-team-models"),t&&t.models?t.models.includes("all-proxy-models")?y.map(e=>(0,r.jsx)(eo,{value:e,children:e},e)):t.models.map(e=>(0,r.jsx)(eo,{value:e,children:e},e)):y.map(e=>(0,r.jsx)(eo,{value:e,children:e},e))]})}),(0,r.jsxs)(Y.Z,{className:"mt-20 mb-8",children:[(0,r.jsx)(H.Z,{children:(0,r.jsx)("b",{children:"Optional Settings"})}),(0,r.jsxs)($.Z,{children:[(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: $".concat((null==t?void 0:t.max_budget)!==null&&(null==t?void 0:t.max_budget)!==void 0?null==t?void 0:t.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.max_budget&&l>t.max_budget)throw Error("Budget cannot exceed team max budget: $".concat(t.max_budget))}}],children:(0,r.jsx)(er.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Reset Budget",name:"budget_duration",help:"Team Reset Budget: ".concat((null==t?void 0:t.budget_duration)!==null&&(null==t?void 0:t.budget_duration)!==void 0?null==t?void 0:t.budget_duration:"None"),children:(0,r.jsxs)(el.default,{defaultValue:null,placeholder:"n/a",children:[(0,r.jsx)(el.default.Option,{value:"24h",children:"daily"}),(0,r.jsx)(el.default.Option,{value:"30d",children:"monthly"})]})}),(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Tokens per minute Limit (TPM)",name:"tpm_limit",help:"TPM cannot exceed team TPM limit: ".concat((null==t?void 0:t.tpm_limit)!==null&&(null==t?void 0:t.tpm_limit)!==void 0?null==t?void 0:t.tpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.tpm_limit&&l>t.tpm_limit)throw Error("TPM limit cannot exceed team TPM limit: ".concat(t.tpm_limit))}}],children:(0,r.jsx)(er.Z,{step:1,width:400})}),(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Requests per minute Limit (RPM)",name:"rpm_limit",help:"RPM cannot exceed team RPM limit: ".concat((null==t?void 0:t.rpm_limit)!==null&&(null==t?void 0:t.rpm_limit)!==void 0?null==t?void 0:t.rpm_limit:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&t&&null!==t.rpm_limit&&l>t.rpm_limit)throw Error("RPM limit cannot exceed team RPM limit: ".concat(t.rpm_limit))}}],children:(0,r.jsx)(er.Z,{step:1,width:400})}),(0,r.jsx)(et.Z.Item,{label:"Expire Key (eg: 30s, 30h, 30d)",name:"duration",className:"mt-8",children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(ea.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})})]})]})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Create Key"})})]})}),u&&(0,r.jsx)(es.Z,{visible:d,onOk:f,onCancel:w,footer:null,children:(0,r.jsxs)(J.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(Q.Z,{children:"Save your Key"}),(0,r.jsx)(G.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Please save this secret key somewhere safe and accessible. For security reasons, ",(0,r.jsx)("b",{children:"you will not be able to view it again"})," ","through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]})}),(0,r.jsx)(G.Z,{numColSpan:1,children:null!=u?(0,r.jsxs)("div",{children:[(0,r.jsx)(X.Z,{className:"mt-3",children:"API Key:"}),(0,r.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,r.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal"},children:u})}),(0,r.jsx)(ee.CopyToClipboard,{text:u,onCopy:()=>{h.ZP.success("API Key copied to clipboard")},children:(0,r.jsx)(W.Z,{className:"mt-3",children:"Copy API Key"})})]}):(0,r.jsx)(X.Z,{children:"Key being created, this might take 30s"})})]})})]})},ec=t(9454),ed=t(98941),em=t(33393),eh=t(5),eu=t(9853),ex=t(13810),ep=t(39290),ej=t(66952),eg=t(61244),ey=t(10827),eZ=t(3851),ef=t(2044),ew=t(64167),eb=t(74480),e_=t(7178),ek=t(95093),ev=t(27166);let{Option:eS}=el.default;var eA=e=>{let{userID:l,userRole:t,accessToken:s,selectedTeam:a,data:o,setData:i,teams:c}=e,[d,m]=(0,n.useState)(!1),[u,x]=(0,n.useState)(!1),[p,j]=(0,n.useState)(null),[g,Z]=n.useState(null),[f,w]=(0,n.useState)(null),[b,_]=(0,n.useState)(null),[S,A]=(0,n.useState)(""),[N,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),[T,E]=(0,n.useState)([]),O=new Set,[F,M]=(0,n.useState)(O);(0,n.useEffect)(()=>{(async()=>{try{if(null===l)return;if(null!==s&&null!==t){let e=(await k(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),E(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,l,t]),(0,n.useEffect)(()=>{if(c){let e=new Set;c.forEach((l,t)=>{let s=l.team_id;e.add(s)}),M(e)}},[c]);let L=e=>{console.log("handleEditClick:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),P(e),I(!0)},U=async e=>{if(null==s)return;let l=e.token;e.key=l,console.log("handleEditSubmit:",e);let t=await R(s,e);console.log("handleEditSubmit: newKeyValues",t),o&&i(o.map(e=>e.token===l?t:e)),h.ZP.success("Key updated successfully"),I(!1),P(null)},D=async e=>{try{if(null==s||null==e)return;console.log("accessToken: ".concat(s,"; token: ").concat(e.token));let l=await v(s,e.token);console.log("Response:",l),_(l);try{let e=await z(s,l);console.log("Response2:",e);let t=[...l,...e.response];_(t),A(e.predicted_spend),console.log("Combined Data:",t)}catch(e){console.error("There was an error fetching the predicted data",e)}}catch(e){console.error("There was an error fetching the data",e)}};(0,n.useEffect)(()=>{D(f)},[f]);let B=async e=>{console.log("handleDelete:",e),null==e.token&&null!==e.token_id&&(e.token=e.token_id),null!=o&&(j(e.token),localStorage.removeItem("userData"+l),x(!0))},q=async()=>{if(null!=p&&null!=o){try{await y(s,p);let e=o.filter(e=>e.token!==p);i(e)}catch(e){console.error("Error deleting the key:",e)}x(!1),j(null)}};if(null!=o)return console.log("RERENDER TRIGGERED"),(0,r.jsxs)("div",{children:[(0,r.jsxs)(ex.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4 mt-2",children:[(0,r.jsxs)(ey.Z,{className:"mt-5",children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"Key Alias"}),(0,r.jsx)(eb.Z,{children:"Secret Key"}),(0,r.jsx)(eb.Z,{children:"Spend (USD)"}),(0,r.jsx)(eb.Z,{children:"Budget (USD)"}),(0,r.jsx)(eb.Z,{children:"Models"}),(0,r.jsx)(eb.Z,{children:"TPM / RPM Limits"})]})}),(0,r.jsx)(eZ.Z,{children:o.map(e=>{if(console.log(e),"litellm-dashboard"===e.team_id)return null;if(a){if(console.log("item team id: ".concat(e.team_id,", knownTeamIDs.has(item.team_id): ").concat(F.has(e.team_id),", selectedTeam id: ").concat(a.team_id)),(null!=a.team_id||null===e.team_id||F.has(e.team_id))&&e.team_id!=a.team_id)return null;console.log("item team id: ".concat(e.team_id,", is returned"))}return(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"2px",whiteSpace:"pre-wrap",overflow:"hidden"},children:null!=e.key_alias?(0,r.jsx)(X.Z,{children:e.key_alias}):(0,r.jsx)(X.Z,{children:"Not Set"})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(X.Z,{children:e.key_name})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(X.Z,{children:(()=>{try{return parseFloat(e.spend).toFixed(4)}catch(l){return e.spend}})()})}),(0,r.jsx)(ef.Z,{children:null!=e.max_budget?(0,r.jsx)(X.Z,{children:e.max_budget}):(0,r.jsx)(X.Z,{children:"Unlimited"})}),(0,r.jsx)(ef.Z,{children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(r.Fragment,{children:a&&a.models&&a.models.length>0?a.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(X.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(X.Z,{children:"All Team Models"})},l):(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(X.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l)):(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(X.Z,{children:"all-proxy-models"})})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(X.Z,{children:"All Proxy Models"})},l):"all-team-models"===e?(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(X.Z,{children:"All Team Models"})},l):(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(X.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)(X.Z,{children:["TPM: ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{})," RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(eg.Z,{onClick:()=>{w(e),Z(e.id)},icon:ec.Z,size:"sm"}),(0,r.jsx)(ep.Z,{open:null!==g,onClose:()=>{Z(null),w(null)},children:(0,r.jsx)(ej.Z,{children:f&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3",children:[(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Spend"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:(()=>{try{return parseFloat(f.spend).toFixed(4)}catch(e){return f.spend}})()})})]}),(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Budget"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor font-semibold text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=f.max_budget?(0,r.jsx)(r.Fragment,{children:f.max_budget}):(0,r.jsx)(r.Fragment,{children:"Unlimited"})})})]},e.name),(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)("p",{className:"text-tremor-default font-medium text-tremor-content dark:text-dark-tremor-content",children:"Expires"}),(0,r.jsx)("div",{className:"mt-2 flex items-baseline space-x-2.5",children:(0,r.jsx)("p",{className:"text-tremor-default font-small text-tremor-content-strong dark:text-dark-tremor-content-strong",children:null!=f.expires?(0,r.jsx)(r.Fragment,{children:new Date(f.expires).toLocaleString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}):(0,r.jsx)(r.Fragment,{children:"Never"})})})]},e.name)]}),(0,r.jsx)(ex.Z,{className:"mt-6 mb-6",children:b&&(0,r.jsx)(eu.Z,{className:"mt-6",data:b,colors:["blue","amber"],index:"date",categories:["spend","predicted_spend"],yAxisWidth:80})}),(0,r.jsx)(Q.Z,{children:"Metadata"}),(0,r.jsx)(X.Z,{children:JSON.stringify(f.metadata)}),(0,r.jsx)(W.Z,{variant:"light",className:"mx-auto flex items-center",onClick:()=>{Z(null),w(null)},children:"Close"})]})})}),(0,r.jsx)(eg.Z,{icon:ed.Z,size:"sm",onClick:()=>L(e)}),(0,r.jsx)(eg.Z,{onClick:()=>B(e),icon:em.Z,size:"sm"})]})]},e.token)})})]}),u&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:""}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Key"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this key ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(W.Z,{onClick:q,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(W.Z,{onClick:()=>{x(!1),j(null)},children:"Cancel"})]})]})]})})]}),C&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,token:s,onSubmit:o}=e,[i]=et.Z.useForm(),[d,m]=(0,n.useState)(a),[h,u]=(0,n.useState)([]),[x,p]=(0,n.useState)(!1);return(0,r.jsx)(es.Z,{title:"Edit Key",visible:l,width:800,footer:null,onOk:()=>{i.validateFields().then(e=>{i.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(et.Z,{form:i,onFinish:U,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"Key Name",name:"key_alias",rules:[{required:!0,message:"Please input a key name"}],help:"required",children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"Models",name:"models",rules:[{validator:(e,l)=>{let t=l.filter(e=>!d.models.includes(e)&&"all-team-models"!==e&&"all-proxy-models"!==e);return(console.log("errorModels: ".concat(t)),t.length>0)?Promise.reject("Some models are not part of the new team's models - ".concat(t)):Promise.resolve()}}],children:(0,r.jsxs)(el.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(eS,{value:"all-team-models",children:"All Team Models"},"all-team-models"),d&&d.models?d.models.includes("all-proxy-models")?T.filter(e=>"all-proxy-models"!==e).map(e=>(0,r.jsx)(eS,{value:e,children:e},e)):d.models.map(e=>(0,r.jsx)(eS,{value:e,children:e},e)):T.map(e=>(0,r.jsx)(eS,{value:e,children:e},e))]})}),(0,r.jsx)(et.Z.Item,{className:"mt-8",label:"Max Budget (USD)",name:"max_budget",help:"Budget cannot exceed team max budget: ".concat((null==d?void 0:d.max_budget)!==null&&(null==d?void 0:d.max_budget)!==void 0?null==d?void 0:d.max_budget:"unlimited"),rules:[{validator:async(e,l)=>{if(l&&d&&null!==d.max_budget&&l>d.max_budget)throw console.log("keyTeam.max_budget: ".concat(d.max_budget)),Error("Budget cannot exceed team max budget: $".concat(d.max_budget))}}],children:(0,r.jsx)(er.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(et.Z.Item,{label:"token",name:"token",hidden:!0}),(0,r.jsx)(et.Z.Item,{label:"Team",name:"team_id",help:"the team this key belongs to",children:(0,r.jsx)(ek.Z,{value:s.team_alias,children:null==c?void 0:c.map((e,l)=>(0,r.jsx)(ev.Z,{value:e.team_id,onClick:()=>m(e),children:e.team_alias},l))})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Edit Key"})})]})})},{visible:N,onCancel:()=>{I(!1),P(null)},token:C,onSubmit:U})]})},eN=t(76032),eI=t(35152),eC=e=>{let{userID:l,userRole:t,accessToken:s,userSpend:a,selectedTeam:o}=e;console.log("userSpend: ".concat(a));let[i,c]=(0,n.useState)(null!==a?a:0),[d,m]=(0,n.useState)(0),[h,u]=(0,n.useState)([]);(0,n.useEffect)(()=>{let e=async()=>{if(s&&l&&t&&"Admin"===t&&null==a)try{let e=await w(s);e&&(e.spend?c(e.spend):c(0),e.max_budget?m(e.max_budget):m(0))}catch(e){console.error("Error fetching global spend data:",e)}};(async()=>{try{if(null===l||null===t)return;if(null!==s){let e=(await k(s,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),u(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[t,s,l]),(0,n.useEffect)(()=>{null!==a&&c(a)},[a]);let x=[];o&&o.models&&(x=o.models),x&&x.includes("all-proxy-models")&&(console.log("user models:",h),x=h);let p=void 0!==i?i.toFixed(4):null;return console.log("spend in view user spend: ".concat(i)),(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:["Total Spend"," "]}),(0,r.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",p]})]}),(0,r.jsx)("div",{className:"ml-auto",children:(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(H.Z,{children:"Models"}),(0,r.jsx)($.Z,{className:"absolute right-0 z-10 bg-white p-2 shadow-lg max-w-xs",children:(0,r.jsx)(eN.Z,{children:x.map(e=>(0,r.jsx)(eI.Z,{children:(0,r.jsx)(X.Z,{children:e})},e))})})]})})]})},eP=e=>{let{userID:l,userRole:t,selectedTeam:s,accessToken:a}=e,[o,i]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{if(null===l||null===t)return;if(null!==a){let e=(await k(a,l,t)).data.map(e=>e.id);console.log("available_model_names:",e),i(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[a,l,t]);let c=[];return s&&s.models&&(c=s.models),c&&c.includes("all-proxy-models")&&(console.log("user models:",o),c=o),(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("div",{className:"mb-5",children:(0,r.jsx)("p",{className:"text-3xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:null==s?void 0:s.team_alias})})})},eT=e=>{let l,{teams:t,setSelectedTeam:s,userRole:a}=e,o={models:[],team_id:null,team_alias:"Default Team"},[i,c]=(0,n.useState)(o);return(l="App User"===a?t:t?[...t,o]:[o],"App User"===a)?null:(0,r.jsxs)("div",{className:"mt-5 mb-5",children:[(0,r.jsx)(Q.Z,{children:"Select Team"}),(0,r.jsx)(X.Z,{children:"If you belong to multiple teams, this setting controls which team is used by default when creating new API Keys."}),(0,r.jsxs)(X.Z,{className:"mt-3 mb-3",children:[(0,r.jsx)("b",{children:"Default Team:"})," If no team_id is set for a key, it will be grouped under here."]}),l&&l.length>0?(0,r.jsx)(ek.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ev.Z,{value:String(l),onClick:()=>s(e),children:e.team_alias},l))}):(0,r.jsxs)(X.Z,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]})},eE=t(37963),eO=t(36083);console.log("isLocal:",!1);var eF=e=>{let{userID:l,userRole:t,teams:s,keys:a,setUserRole:i,userEmail:c,setUserEmail:d,setTeams:m,setKeys:h}=e,[u,x]=(0,n.useState)(null),p=(0,o.useSearchParams)();p.get("viewSpend"),(0,o.useRouter)();let j=p.get("token"),[g,y]=(0,n.useState)(null),[Z,b]=(0,n.useState)(null),[_,v]=(0,n.useState)([]),[S,A]=(0,n.useState)(s?s[0]:null);if(window.addEventListener("beforeunload",function(){sessionStorage.clear()}),(0,n.useEffect)(()=>{if(j){let e=(0,eE.o)(j);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),y(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),i(l)}else console.log("User role not defined");e.user_email?d(e.user_email):console.log("User Email is not set ".concat(e))}}if(l&&g&&t&&!a&&!u){let e=sessionStorage.getItem("userModels"+l);e?v(JSON.parse(e)):(async()=>{try{let e=await f(g,l,t,!1,null,null);if(console.log("received teams in user dashboard: ".concat(Object.keys(e),"; team values: ").concat(Object.entries(e.teams))),"Admin"==t){let e=await w(g);x(e),console.log("globalSpend:",e)}else x(e.user_info);h(e.keys),m(e.teams),A(e.teams?e.teams[0]:null),sessionStorage.setItem("userData"+l,JSON.stringify(e.keys)),sessionStorage.setItem("userSpendData"+l,JSON.stringify(e.user_info));let s=(await k(g,l,t)).data.map(e=>e.id);console.log("available_model_names:",s),v(s),console.log("userModels:",_),sessionStorage.setItem("userModels"+l,JSON.stringify(s))}catch(e){console.error("There was an error fetching the data",e)}})()}},[l,j,g,a,t]),(0,n.useEffect)(()=>{if(null!==a&&null!=S){let e=0;for(let l of a)S.hasOwnProperty("team_id")&&null!==l.team_id&&l.team_id===S.team_id&&(e+=l.spend);b(e)}else if(null!==a){let e=0;for(let l of a)e+=l.spend;b(e)}},[S]),null==l||null==j){let e="/sso/key/generate";return console.log("Full URL:",e),window.location.href=e,null}if(null==g)return null;if(null==t&&i("App Owner"),t&&"Admin Viewer"==t){let{Title:e,Paragraph:l}=eO.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to create keys"})]})}return console.log("inside user dashboard, selected team",S),console.log("teamSpend: ".concat(Z)),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsx)(J.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:(0,r.jsxs)(G.Z,{numColSpan:1,children:[(0,r.jsx)(eP,{userID:l,userRole:t,selectedTeam:S||null,accessToken:g}),(0,r.jsx)(eC,{userID:l,userRole:t,accessToken:g,userSpend:Z,selectedTeam:S||null}),(0,r.jsx)(eA,{userID:l,userRole:t,accessToken:g,selectedTeam:S||null,data:a,setData:h,teams:s}),(0,r.jsx)(ei,{userID:l,team:S||null,userRole:t,accessToken:g,data:a,setData:h},S?S.team_id:null),(0,r.jsx)(eT,{teams:s,setSelectedTeam:A,userRole:t})]})})})},eM=t(92836),eR=t(26734),eL=t(41608),eU=t(32126),eD=t(23682),ez=t(52273),eB=t(47047),eq=t(76628),eV=t(38302),eK=t(28683),eG=t(1460),eJ=t(78578),eW=e=>{let{modelID:l,accessToken:t}=e,[s,a]=(0,n.useState)(!1),o=async()=>{try{h.ZP.info("Making API Call"),a(!0);let e=await p(t,l);console.log("model delete Response:",e),h.ZP.success("Model ".concat(l," deleted successfully")),a(!1)}catch(e){console.error("Error deleting the model:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(eg.Z,{onClick:()=>a(!0),icon:em.Z,size:"sm"}),(0,r.jsx)(es.Z,{open:s,onOk:o,okType:"danger",onCancel:()=>a(!1),children:(0,r.jsxs)(J.Z,{numItems:1,className:"gap-2 w-full",children:[(0,r.jsx)(Q.Z,{children:"Delete Model"}),(0,r.jsx)(G.Z,{numColSpan:1,children:(0,r.jsx)("p",{children:"Are you sure you want to delete this model? This action is irreversible."})}),(0,r.jsx)(G.Z,{numColSpan:1,children:(0,r.jsxs)("p",{children:["Model ID: ",(0,r.jsx)("b",{children:l})]})})]})})]})},eY=t(97766),e$=t(46495);let{Title:eH,Link:eX}=eO.default;(s=a||(a={})).OpenAI="OpenAI",s.Azure="Azure",s.Anthropic="Anthropic",s.Google_AI_Studio="Gemini (Google AI Studio)",s.Bedrock="Amazon Bedrock",s.OpenAI_Compatible="OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)",s.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)";let eQ={OpenAI:"openai",Azure:"azure",Anthropic:"anthropic",Google_AI_Studio:"gemini",Bedrock:"bedrock",OpenAI_Compatible:"openai",Vertex_AI:"vertex_ai"};var e0=e=>{var l,t,s;let{accessToken:o,token:i,userRole:c,userID:d}=e,[m,p]=(0,n.useState)({data:[]}),[j,g]=(0,n.useState)([]),[y]=et.Z.useForm(),[Z,f]=(0,n.useState)(null),[w,_]=(0,n.useState)([]),k=Object.values(a).filter(e=>isNaN(Number(e))),[v,S]=(0,n.useState)("OpenAI"),[A,N]=(0,n.useState)("");if((0,n.useEffect)(()=>{if(!o||!i||!c||!d)return;let e=async()=>{try{let e=await b(o,d,c);if(console.log("Model data response:",e.data),p(e),"Admin"===c&&o){let e=await O(o);console.log("Pending Requests:",j),g(e.requests||[])}}catch(e){console.error("There was an error fetching the model data",e)}};o&&i&&c&&d&&e();let l=async()=>{let e=await u();console.log("received model cost map data: ".concat(Object.keys(e))),f(e)};null==Z&&l()},[o,i,c,d,Z]),!m||!o||!i||!c||!d)return(0,r.jsx)("div",{children:"Loading..."});let I=[];for(let e=0;e<m.data.length;e++){let s=m.data[e],a=null==s?void 0:null===(l=s.litellm_params)||void 0===l?void 0:l.model,r=null==s?void 0:s.model_info,n="",o="Undefined",i="Undefined",c="Undefined",d={},h=e=>(console.log("GET PROVIDER CALLED! - ".concat(Z)),null!=Z&&"object"==typeof Z&&e in Z)?Z[e].litellm_provider:"openai";if(a){let e=a.split("/"),l=e[0];n=1===e.length?h(a):l}else n="openai";r&&(o=null==r?void 0:r.input_cost_per_token,i=null==r?void 0:r.output_cost_per_token,c=null==r?void 0:r.max_tokens),(null==s?void 0:s.litellm_params)&&(d=Object.fromEntries(Object.entries(null==s?void 0:s.litellm_params).filter(e=>{let[l]=e;return"model"!==l&&"api_base"!==l}))),m.data[e].provider=n,m.data[e].input_cost=o,m.data[e].output_cost=i,m.data[e].max_tokens=c,m.data[e].api_base=null==s?void 0:null===(t=s.litellm_params)||void 0===t?void 0:t.api_base,m.data[e].cleanedLitellmParams=d,I.push(s.model_name),console.log(m.data[e])}if(c&&"Admin Viewer"==c){let{Title:e,Paragraph:l}=eO.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to view all models"})]})}let C=e=>{console.log("received provider string: ".concat(e));let l=Object.keys(a).find(l=>a[l]===e);if(l){let e=eQ[l];console.log("mappingResult: ".concat(e));let t=[];"object"==typeof Z&&Object.entries(Z).forEach(l=>{let[s,a]=l;null!==a&&"object"==typeof a&&"litellm_provider"in a&&(a.litellm_provider===e||a.litellm_provider.includes(e))&&t.push(s)}),_(t),console.log("providerModels: ".concat(w))}},P=async()=>{try{h.ZP.info("Running health check..."),N("");let e=await K(o);N(e)}catch(e){console.error("Error running health check:",e),N("Error running health check")}},T=async e=>{try{let l=Object.values(e.model);console.log("received deployments: ".concat(l)),console.log("received type of deployments: ".concat(typeof l)),l.forEach(async l=>{console.log("litellm_model: ".concat(l));let t={},s={};t.model=l;let a="";for(let[l,r]of Object.entries(e))if("model_name"==l)a+=r;else if("custom_llm_provider"==l)continue;else if("model"==l)continue;else if("base_model"===l)s[l]=r;else if("litellm_extra_params"==l){console.log("litellm_extra_params:",r);let e={};if(r&&void 0!=r){try{e=JSON.parse(r)}catch(e){throw h.ZP.error("Failed to parse LiteLLM Extra Params: "+e,20),Error("Failed to parse litellm_extra_params: "+e)}for(let[l,s]of Object.entries(e))t[l]=s}}else t[l]=r;let r={model_name:a,litellm_params:t,model_info:s},n=await x(o,r);console.log("response for model create call: ".concat(n.data))}),y.resetFields()}catch(e){h.ZP.error("Failed to create model: "+e,20)}};return console.log("selectedProvider: ".concat(v)),console.log("providerModels.length: ".concat(w.length)),(0,r.jsx)("div",{style:{width:"100%",height:"100%"},children:(0,r.jsxs)(eR.Z,{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(eL.Z,{className:"mt-2",children:[(0,r.jsx)(eM.Z,{children:"All Models"}),(0,r.jsx)(eM.Z,{children:"Add Model"}),(0,r.jsx)(eM.Z,{children:(0,r.jsx)("pre",{children:"/health Models"})})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(J.Z,{children:(0,r.jsx)(ex.Z,{children:(0,r.jsxs)(ey.Z,{className:"mt-5",children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"Model Name "}),(0,r.jsx)(eb.Z,{children:"Provider"}),"Admin"===c&&(0,r.jsx)(eb.Z,{children:"API Base"}),(0,r.jsx)(eb.Z,{children:"Extra litellm Params"}),(0,r.jsx)(eb.Z,{children:"Input Price per token ($)"}),(0,r.jsx)(eb.Z,{children:"Output Price per token ($)"}),(0,r.jsx)(eb.Z,{children:"Max Tokens"})]})}),(0,r.jsx)(eZ.Z,{children:m.data.map((e,l)=>(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(X.Z,{children:e.model_name})}),(0,r.jsx)(ef.Z,{children:e.provider}),"Admin"===c&&(0,r.jsx)(ef.Z,{children:e.api_base}),(0,r.jsx)(ef.Z,{children:(0,r.jsxs)(Y.Z,{children:[(0,r.jsx)(H.Z,{children:(0,r.jsx)(X.Z,{children:"Litellm params"})}),(0,r.jsx)($.Z,{children:(0,r.jsx)("pre",{children:JSON.stringify(e.cleanedLitellmParams,null,2)})})]})}),(0,r.jsx)(ef.Z,{children:e.input_cost}),(0,r.jsx)(ef.Z,{children:e.output_cost}),(0,r.jsx)(ef.Z,{children:e.max_tokens}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(eW,{modelID:e.model_info.id,accessToken:o})})]},l))})]})})})}),(0,r.jsxs)(eU.Z,{className:"h-full",children:[(0,r.jsx)(eH,{level:2,children:"Add new model"}),(0,r.jsx)(ex.Z,{children:(0,r.jsxs)(et.Z,{form:y,onFinish:()=>{y.validateFields().then(e=>{T(e)}).catch(e=>{console.error("Validation failed:",e)})},labelCol:{span:10},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Provider:",name:"custom_llm_provider",tooltip:"E.g. OpenAI, Azure OpenAI, Anthropic, Bedrock, etc.",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(ek.Z,{value:v.toString(),children:k.map((e,l)=>(0,r.jsx)(ev.Z,{value:e,onClick:()=>{C(e),S(e)},children:e},l))})}),(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Public Model Name",name:"model_name",tooltip:"Model name your users will pass in. Also used for load-balancing, LiteLLM will load balance between all models with this public name.",className:"mb-0",children:(0,r.jsx)(ez.Z,{placeholder:"Vertex AI (Anthropic, Gemini, etc.)"===(s=v.toString())?"gemini-pro":"Anthropic"==s?"claude-3-opus":"Amazon Bedrock"==s?"claude-3-opus":"Gemini (Google AI Studio)"==s?"gemini-pro":"gpt-3.5-turbo"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eK.Z,{span:10}),(0,r.jsx)(eK.Z,{span:10,children:(0,r.jsx)(X.Z,{className:"mb-3 mt-1",children:"Model name your users will pass in."})})]}),(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"LiteLLM Model Name(s)",name:"model",tooltip:"Actual model name used for making litellm.completion() call.",className:"mb-0",children:"Azure"===v?(0,r.jsx)(ez.Z,{placeholder:"Enter model name"}):w.length>0?(0,r.jsx)(eB.Z,{value:w,children:w.map((e,l)=>(0,r.jsx)(eq.Z,{value:e,children:e},l))}):(0,r.jsx)(ez.Z,{placeholder:"gpt-3.5-turbo-0125"})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eK.Z,{span:10}),(0,r.jsx)(eK.Z,{span:10,children:(0,r.jsxs)(X.Z,{className:"mb-3 mt-1",children:["Actual model name used for making ",(0,r.jsx)(eX,{href:"https://docs.litellm.ai/docs/providers",target:"_blank",children:"litellm.completion() call"}),". We'll ",(0,r.jsx)(eX,{href:"https://docs.litellm.ai/docs/proxy/reliability#step-1---set-deployments-on-config",target:"_blank",children:"loadbalance"})," models with the same 'public name'"]})})]}),"Amazon Bedrock"!=v&&"Vertex AI (Anthropic, Gemini, etc.)"!=v&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Key",name:"api_key",children:(0,r.jsx)(ez.Z,{placeholder:"sk-",type:"password"})}),"OpenAI"==v&&(0,r.jsx)(et.Z.Item,{label:"Organization ID",name:"organization_id",children:(0,r.jsx)(ez.Z,{placeholder:"[OPTIONAL] my-unique-org"})}),"Vertex AI (Anthropic, Gemini, etc.)"==v&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Project",name:"vertex_project",children:(0,r.jsx)(ez.Z,{placeholder:"adroit-cadet-1234.."})}),"Vertex AI (Anthropic, Gemini, etc.)"==v&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Location",name:"vertex_location",children:(0,r.jsx)(ez.Z,{placeholder:"us-east-1"})}),"Vertex AI (Anthropic, Gemini, etc.)"==v&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"Vertex Credentials",name:"vertex_credentials",className:"mb-0",children:(0,r.jsx)(e$.Z,{name:"file",accept:".json",beforeUpload:e=>{if("application/json"===e.type){let l=new FileReader;l.onload=e=>{if(e.target){let l=e.target.result;y.setFieldsValue({vertex_credentials:l})}},l.readAsText(e)}return!1},onChange(e){"uploading"!==e.file.status&&console.log(e.file,e.fileList),"done"===e.file.status?h.ZP.success("".concat(e.file.name," file uploaded successfully")):"error"===e.file.status&&h.ZP.error("".concat(e.file.name," file upload failed."))},children:(0,r.jsx)(en.ZP,{icon:(0,r.jsx)(eY.Z,{}),children:"Click to Upload"})})}),"Vertex AI (Anthropic, Gemini, etc.)"==v&&(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eK.Z,{span:10}),(0,r.jsx)(eK.Z,{span:10,children:(0,r.jsx)(X.Z,{className:"mb-3 mt-1",children:"Give litellm a gcp service account(.json file), so it can make the relevant calls"})})]}),("Azure"==v||"OpenAI-Compatible Endpoints (Groq, Together AI, Mistral AI, etc.)"==v)&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Base",name:"api_base",children:(0,r.jsx)(ez.Z,{placeholder:"https://..."})}),"Azure"==v&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"API Version",name:"api_version",children:(0,r.jsx)(ez.Z,{placeholder:"2023-07-01-preview"})}),"Azure"==v&&(0,r.jsxs)(et.Z.Item,{label:"Base Model",name:"base_model",children:[(0,r.jsx)(ez.Z,{placeholder:"azure/gpt-3.5-turbo"}),(0,r.jsxs)(X.Z,{children:["The actual model your azure deployment uses. Used for accurate cost tracking. Select name from ",(0,r.jsx)(eX,{href:"https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json",target:"_blank",children:"here"})]})]}),"Amazon Bedrock"==v&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Access Key ID",name:"aws_access_key_id",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(ez.Z,{placeholder:""})}),"Amazon Bedrock"==v&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Secret Access Key",name:"aws_secret_access_key",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(ez.Z,{placeholder:""})}),"Amazon Bedrock"==v&&(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"AWS Region Name",name:"aws_region_name",tooltip:"You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).",children:(0,r.jsx)(ez.Z,{placeholder:"us-east-1"})}),(0,r.jsx)(et.Z.Item,{label:"LiteLLM Params",name:"litellm_extra_params",tooltip:"Optional litellm params used for making a litellm.completion() call.",className:"mb-0",children:(0,r.jsx)(eJ.Z,{rows:4,placeholder:'{ "rpm": 100, "timeout": 0, "stream_timeout": 0 }'})}),(0,r.jsxs)(eV.Z,{children:[(0,r.jsx)(eK.Z,{span:10}),(0,r.jsx)(eK.Z,{span:10,children:(0,r.jsxs)(X.Z,{className:"mb-3 mt-1",children:["Pass JSON of litellm supported params ",(0,r.jsx)(eX,{href:"https://docs.litellm.ai/docs/completion/input",target:"_blank",children:"litellm.completion() call"})]})})]})]}),(0,r.jsx)("div",{style:{textAlign:"center",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Add Model"})}),(0,r.jsx)(eG.Z,{title:"Get help on our github",children:(0,r.jsx)(eO.default.Link,{href:"https://github.com/BerriAI/litellm/issues",children:"Need Help?"})})]})})]}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)(X.Z,{children:"`/health` will run a very small request through your models configured on litellm"}),(0,r.jsx)(W.Z,{onClick:P,children:"Run `/health`"}),A&&(0,r.jsx)("pre",{children:JSON.stringify(A,null,2)})]})})]})]})})};let{Option:e1}=el.default;var e2=e=>{let{userID:l,accessToken:t,teams:s}=e,[a]=et.Z.useForm(),[o,i]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),[m,u]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{try{let e=await k(t,l,"any"),s=[];for(let l=0;l<e.data.length;l++){let t=e.data[l];s.push(t.id)}console.log("Model data response:",e.data),console.log("Available models:",s),u(s)}catch(e){console.error("Error fetching model data:",e)}})()},[]);let x=()=>{i(!1),a.resetFields()},p=()=>{i(!1),d(null),a.resetFields()},j=async e=>{try{h.ZP.info("Making API Call"),i(!0),console.log("formValues in create user:",e);let s=await g(t,null,e);console.log("user create Response:",s),d(s.key),h.ZP.success("API user Created"),a.resetFields(),localStorage.removeItem("userData"+l)}catch(e){console.error("Error creating the user:",e)}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(W.Z,{className:"mx-auto",onClick:()=>i(!0),children:"+ Invite User"}),(0,r.jsxs)(es.Z,{title:"Invite User",visible:o,width:800,footer:null,onOk:x,onCancel:p,children:[(0,r.jsx)(X.Z,{className:"mb-1",children:"Invite a user to login to the Admin UI and create Keys"}),(0,r.jsx)(X.Z,{className:"mb-6",children:(0,r.jsx)("b",{children:"Note: SSO Setup Required for this"})}),(0,r.jsxs)(et.Z,{form:a,onFinish:j,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsx)(et.Z.Item,{label:"User Email",name:"user_email",children:(0,r.jsx)(ea.Z,{placeholder:"Enter User Email"})}),(0,r.jsx)(et.Z.Item,{label:"Team ID",name:"team_id",children:(0,r.jsx)(el.default,{placeholder:"Select Team ID",style:{width:"100%"},children:s?s.map(e=>(0,r.jsx)(e1,{value:e.team_id,children:e.team_alias},e.team_id)):(0,r.jsx)(e1,{value:null,children:"Default Team"},"default")})}),(0,r.jsx)(et.Z.Item,{label:"Metadata",name:"metadata",children:(0,r.jsx)(ea.Z.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Create User"})})]})]}),c&&(0,r.jsxs)(es.Z,{title:"User Created Successfully",visible:o,onOk:x,onCancel:p,footer:null,children:[(0,r.jsx)("p",{children:"User has been created to access your proxy. Please Ask them to Log In."}),(0,r.jsx)("br",{}),(0,r.jsx)("p",{children:(0,r.jsx)("b",{children:"Note: This Feature is only supported through SSO on the Admin UI"})})]})]})},e4=e=>{let{accessToken:l,token:t,keys:s,userRole:a,userID:o,teams:i,setKeys:c}=e,[d,m]=(0,n.useState)(null),[h,u]=(0,n.useState)(null),[x,p]=(0,n.useState)(0),[j,g]=n.useState(null),[y,Z]=(0,n.useState)(null);if((0,n.useEffect)(()=>{if(!l||!t||!a||!o)return;let e=async()=>{try{let e=await f(l,null,a,!0,x,25);console.log("user data response:",e),m(e)}catch(e){console.error("There was an error fetching the model data",e)}};l&&t&&a&&o&&e();let s=async()=>{try{let e=await P(l,null);console.log("user data response:",e),u(e)}catch(e){console.error("There was an error fetching the model data",e)}};a&&("Admin"==a||"Admin Viewer"==a)&&!h&&s()},[l,t,a,o,x]),!d||!l||!t||!a||!o)return(0,r.jsx)("div",{children:"Loading..."});let w=async e=>{try{let t=await P(l,e);console.log("user data response:",t),u(t)}catch(e){console.error("There was an error fetching the model data",e)}};return(0,r.jsx)("div",{style:{width:"100%"},children:(0,r.jsxs)(J.Z,{className:"gap-2 p-2 h-[75vh] w-full mt-8",children:[(0,r.jsx)(e2,{userID:o,accessToken:l,teams:i}),(0,r.jsx)(ex.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh] mb-4",children:(0,r.jsxs)(eR.Z,{children:[(0,r.jsxs)(eL.Z,{variant:"line",defaultValue:"1",children:[(0,r.jsx)(eM.Z,{value:"1",children:"Key Owners"}),(0,r.jsx)(eM.Z,{value:"2",children:"End-Users"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(ey.Z,{className:"mt-5",children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"User ID"}),(0,r.jsx)(eb.Z,{children:"User Email"}),(0,r.jsx)(eb.Z,{children:"User Models"}),(0,r.jsx)(eb.Z,{children:"User Spend ($ USD)"}),(0,r.jsx)(eb.Z,{children:"User Max Budget ($ USD)"}),(0,r.jsx)(eb.Z,{children:"User API Key Aliases"})]})}),(0,r.jsx)(eZ.Z,{children:d.map(e=>(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_id}),(0,r.jsx)(ef.Z,{children:e.user_email}),(0,r.jsx)(ef.Z,{children:e.models&&e.models.length>0?e.models:"All Models"}),(0,r.jsx)(ef.Z,{children:e.spend?e.spend:0}),(0,r.jsx)(ef.Z,{children:e.max_budget?e.max_budget:"Unlimited"}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(J.Z,{numItems:2,children:e&&e.key_aliases&&e.key_aliases.filter(e=>null!==e).length>0?(0,r.jsx)(eh.Z,{size:"xs",color:"indigo",children:e.key_aliases.filter(e=>null!==e).join(", ")}):(0,r.jsx)(eh.Z,{size:"xs",color:"gray",children:"No Keys"})})})]},e.user_id))})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsxs)("div",{className:"flex-1 flex justify-between items-center",children:[(0,r.jsx)(X.Z,{className:"w-1/4 mr-2 text-right",children:"Key"}),(0,r.jsx)(ek.Z,{defaultValue:"1",className:"w-3/4",children:null==s?void 0:s.map((e,l)=>{if(e&&null!==e.key_name&&e.key_name.length>0)return(0,r.jsx)(ev.Z,{value:String(l),onClick:()=>w(e.token),children:e.key_name},l)})})]})]}),(0,r.jsxs)(ey.Z,{children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"End User"}),(0,r.jsx)(eb.Z,{children:"Spend"}),(0,r.jsx)(eb.Z,{children:"Total Events"})]})}),(0,r.jsx)(eZ.Z,{children:null==h?void 0:h.map((e,l)=>(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{children:e.end_user}),(0,r.jsx)(ef.Z,{children:e.total_spend}),(0,r.jsx)(ef.Z,{children:e.total_events})]},l))})]})]})]})]})}),function(){if(!d)return null;let e=Math.ceil(d.length/25);return(0,r.jsxs)("div",{className:"flex justify-between items-center",children:[(0,r.jsxs)("div",{children:["Showing Page ",x+1," of ",e]}),(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-l focus:outline-none",disabled:0===x,onClick:()=>p(x-1),children:"← Prev"}),(0,r.jsx)("button",{className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-r focus:outline-none",onClick:()=>{p(x+1)},children:"Next →"})]})]})}()]})})},e8=e=>{let{teams:l,searchParams:t,accessToken:s,setTeams:a,userID:o,userRole:i}=e,[c]=et.Z.useForm(),[d]=et.Z.useForm(),{Title:m,Paragraph:u}=eO.default,[x,p]=(0,n.useState)(""),[j,g]=(0,n.useState)(!1),[y,f]=(0,n.useState)(l?l[0]:null),[w,b]=(0,n.useState)(!1),[_,v]=(0,n.useState)(!1),[S,A]=(0,n.useState)([]),[N,I]=(0,n.useState)(!1),[C,P]=(0,n.useState)(null),T=e=>{f(e),g(!0)},E=async e=>{let t=e.team_id;if(console.log("handleEditSubmit:",e),null==s)return;let r=await L(s,e);l&&a(l.map(e=>e.team_id===t?r.data:e)),h.ZP.success("Team updated successfully"),g(!1),f(null)},O=async e=>{P(e),I(!0)},F=async()=>{if(null!=C&&null!=l&&null!=s){try{await Z(s,C);let e=l.filter(e=>e.team_id!==C);a(e)}catch(e){console.error("Error deleting the team:",e)}I(!1),P(null)}};(0,n.useEffect)(()=>{(async()=>{try{if(null===o||null===i)return;if(null!==s){let e=(await k(s,o,i)).data.map(e=>e.id);console.log("available_model_names:",e),A(e)}}catch(e){console.error("Error fetching user models:",e)}})()},[s,o,i]);let R=async e=>{try{if(null!=s){h.ZP.info("Creating Team");let t=await M(s,e);null!==l?a([...l,t]):a([t]),console.log("response for team create call: ".concat(t)),h.ZP.success("Team created"),b(!1)}}catch(e){console.error("Error creating the team:",e),h.ZP.error("Error creating the team: "+e,20)}},D=async e=>{try{if(null!=s&&null!=l){h.ZP.info("Adding Member");let t={role:"user",user_email:e.user_email,user_id:e.user_id},r=await U(s,y.team_id,t);console.log("response for team create call: ".concat(r.data));let n=l.findIndex(e=>(console.log("team.team_id=".concat(e.team_id,"; response.data.team_id=").concat(r.data.team_id)),e.team_id===r.data.team_id));if(console.log("foundIndex: ".concat(n)),-1!==n){let e=[...l];e[n]=r.data,a(e),f(r.data)}v(!1)}}catch(e){console.error("Error creating the team:",e)}};return console.log("received teams ".concat(l)),(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(J.Z,{numItems:1,className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)(G.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"All Teams"}),(0,r.jsxs)(ex.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:[(0,r.jsxs)(ey.Z,{children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"Team Name"}),(0,r.jsx)(eb.Z,{children:"Spend (USD)"}),(0,r.jsx)(eb.Z,{children:"Budget (USD)"}),(0,r.jsx)(eb.Z,{children:"Models"}),(0,r.jsx)(eb.Z,{children:"TPM / RPM Limits"})]})}),(0,r.jsx)(eZ.Z,{children:l&&l.length>0?l.map(e=>(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.team_alias}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.spend}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:e.max_budget?e.max_budget:"No limit"}),(0,r.jsx)(ef.Z,{style:{maxWidth:"8-x",whiteSpace:"pre-wrap",overflow:"hidden"},children:Array.isArray(e.models)?(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:0===e.models.length?(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(X.Z,{children:"All Proxy Models"})}):e.models.map((e,l)=>"all-proxy-models"===e?(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"red",children:(0,r.jsx)(X.Z,{children:"All Proxy Models"})},l):(0,r.jsx)(eh.Z,{size:"xs",className:"mb-1",color:"blue",children:(0,r.jsx)(X.Z,{children:e.length>30?"".concat(e.slice(0,30),"..."):e})},l))}):null}),(0,r.jsx)(ef.Z,{style:{maxWidth:"4px",whiteSpace:"pre-wrap",overflow:"hidden"},children:(0,r.jsxs)(X.Z,{children:["TPM:"," ",e.tpm_limit?e.tpm_limit:"Unlimited"," ",(0,r.jsx)("br",{}),"RPM:"," ",e.rpm_limit?e.rpm_limit:"Unlimited"]})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(eg.Z,{icon:ed.Z,size:"sm",onClick:()=>T(e)}),(0,r.jsx)(eg.Z,{onClick:()=>O(e.team_id),icon:em.Z,size:"sm"})]})]},e.team_id)):null})]}),N&&(0,r.jsx)("div",{className:"fixed z-10 inset-0 overflow-y-auto",children:(0,r.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,r.jsx)("div",{className:"fixed inset-0 transition-opacity","aria-hidden":"true",children:(0,r.jsx)("div",{className:"absolute inset-0 bg-gray-500 opacity-75"})}),(0,r.jsx)("span",{className:"hidden sm:inline-block sm:align-middle sm:h-screen","aria-hidden":"true",children:""}),(0,r.jsxs)("div",{className:"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",children:[(0,r.jsx)("div",{className:"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4",children:(0,r.jsx)("div",{className:"sm:flex sm:items-start",children:(0,r.jsxs)("div",{className:"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left",children:[(0,r.jsx)("h3",{className:"text-lg leading-6 font-medium text-gray-900",children:"Delete Team"}),(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)("p",{className:"text-sm text-gray-500",children:"Are you sure you want to delete this team ?"})})]})})}),(0,r.jsxs)("div",{className:"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse",children:[(0,r.jsx)(W.Z,{onClick:F,color:"red",className:"ml-2",children:"Delete"}),(0,r.jsx)(W.Z,{onClick:()=>{I(!1),P(null)},children:"Cancel"})]})]})]})})]})]}),(0,r.jsxs)(G.Z,{numColSpan:1,children:[(0,r.jsx)(W.Z,{className:"mx-auto",onClick:()=>b(!0),children:"+ Create New Team"}),(0,r.jsx)(es.Z,{title:"Create Team",visible:w,width:800,footer:null,onOk:()=>{b(!1),c.resetFields()},onCancel:()=>{b(!1),c.resetFields()},children:(0,r.jsxs)(et.Z,{form:c,onFinish:R,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(el.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(el.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S.map(e=>(0,r.jsx)(el.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(et.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(er.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(et.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(er.Z,{step:1,width:400})}),(0,r.jsx)(et.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(er.Z,{step:1,width:400})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Create Team"})})]})})]}),(0,r.jsxs)(G.Z,{numColSpan:1,children:[(0,r.jsx)(m,{level:4,children:"Team Members"}),(0,r.jsx)(u,{children:"If you belong to multiple teams, this setting controls which teams members you see."}),l&&l.length>0?(0,r.jsx)(ek.Z,{defaultValue:"0",children:l.map((e,l)=>(0,r.jsx)(ev.Z,{value:String(l),onClick:()=>{f(e)},children:e.team_alias},l))}):(0,r.jsxs)(u,{children:["No team created. ",(0,r.jsx)("b",{children:"Defaulting to personal account."})]})]}),(0,r.jsxs)(G.Z,{numColSpan:1,children:[(0,r.jsx)(ex.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(ey.Z,{children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"Member Name"}),(0,r.jsx)(eb.Z,{children:"Role"})]})}),(0,r.jsx)(eZ.Z,{children:y?y.members_with_roles.map((e,l)=>(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.role})]},l)):null})]})}),y&&(0,r.jsx)(e=>{let{visible:l,onCancel:t,team:s,onSubmit:a}=e,[n]=et.Z.useForm();return(0,r.jsx)(es.Z,{title:"Edit Team",visible:l,width:800,footer:null,onOk:()=>{n.validateFields().then(e=>{a({...e,team_id:s.team_id}),n.resetFields()}).catch(e=>{console.error("Validation failed:",e)})},onCancel:t,children:(0,r.jsxs)(et.Z,{form:n,onFinish:E,initialValues:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"Team Name",name:"team_alias",rules:[{required:!0,message:"Please input a team name"}],children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"Models",name:"models",children:(0,r.jsxs)(el.default,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},children:[(0,r.jsx)(el.default.Option,{value:"all-proxy-models",children:"All Proxy Models"},"all-proxy-models"),S&&S.map(e=>(0,r.jsx)(el.default.Option,{value:e,children:e},e))]})}),(0,r.jsx)(et.Z.Item,{label:"Max Budget (USD)",name:"max_budget",children:(0,r.jsx)(er.Z,{step:.01,precision:2,width:200})}),(0,r.jsx)(et.Z.Item,{label:"Tokens per minute Limit (TPM)",name:"tpm_limit",children:(0,r.jsx)(er.Z,{step:1,width:400})}),(0,r.jsx)(et.Z.Item,{label:"Requests per minute Limit (RPM)",name:"rpm_limit",children:(0,r.jsx)(er.Z,{step:1,width:400})}),(0,r.jsx)(et.Z.Item,{label:"Requests per minute Limit (RPM)",name:"team_id",hidden:!0})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Edit Team"})})]})})},{visible:j,onCancel:()=>{g(!1),f(null)},team:y,onSubmit:E})]}),(0,r.jsxs)(G.Z,{numColSpan:1,children:[(0,r.jsx)(W.Z,{className:"mx-auto mb-5",onClick:()=>v(!0),children:"+ Add member"}),(0,r.jsx)(es.Z,{title:"Add member",visible:_,width:800,footer:null,onOk:()=>{v(!1),d.resetFields()},onCancel:()=>{v(!1),d.resetFields()},children:(0,r.jsxs)(et.Z,{form:c,onFinish:D,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(ea.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(et.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(ea.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Add member"})})]})})]})]})})},e3=t(18190),e5=e=>{let l,{searchParams:t,accessToken:s,showSSOBanner:a}=e,[o]=et.Z.useForm(),[i]=et.Z.useForm(),{Title:c,Paragraph:d}=eO.default,[m,u]=(0,n.useState)(""),[x,p]=(0,n.useState)(null),[j,g]=(0,n.useState)(!1),[y,Z]=(0,n.useState)(!1),[f,w]=(0,n.useState)(!1),[b,_]=(0,n.useState)(!1),[k,v]=(0,n.useState)(!1);try{l=window.location.origin}catch(e){l="<your-proxy-url>"}l+="/fallback/login";let S=()=>{v(!1)},A=["proxy_admin","proxy_admin_viewer"];(0,n.useEffect)(()=>{(async()=>{if(null!=s){let e=[],l=await F(s,"proxy_admin_viewer");l.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy viewers: ".concat(l));let t=await F(s,"proxy_admin");t.forEach(l=>{e.push({user_role:l.user_role,user_id:l.user_id,user_email:l.user_email})}),console.log("proxy admins: ".concat(t)),console.log("combinedList: ".concat(e)),p(e)}})()},[s]);let N=()=>{w(!1),i.resetFields()},I=()=>{w(!1),i.resetFields()},C=e=>(0,r.jsxs)(et.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(ea.Z,{name:"user_email",className:"px-3 py-2 border rounded-md w-full"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(et.Z.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(ea.Z,{name:"user_id",className:"px-3 py-2 border rounded-md w-full"})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Add member"})})]}),P=(e,l,t)=>(0,r.jsxs)(et.Z,{form:o,onFinish:e,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{rules:[{required:!0,message:"Required"}],label:"User Role",name:"user_role",labelCol:{span:10},labelAlign:"left",children:(0,r.jsx)(ek.Z,{value:l,children:A.map((e,l)=>(0,r.jsx)(ev.Z,{value:e,children:e},l))})}),(0,r.jsx)(et.Z.Item,{label:"Team ID",name:"user_id",hidden:!0,initialValue:t,valuePropName:"user_id",className:"mt-8",children:(0,r.jsx)(ea.Z,{value:t,disabled:!0})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Update role"})})]}),T=async e=>{try{if(null!=s&&null!=x){h.ZP.info("Making API Call");let l=await D(s,e,null);console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),h.ZP.success("Refresh tab to see updated user role"),w(!1)}}catch(e){console.error("Error creating the key:",e)}},E=async e=>{try{if(null!=s&&null!=x){h.ZP.info("Making API Call");let l=await D(s,e,"proxy_admin_viewer");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),g(!1)}}catch(e){console.error("Error creating the key:",e)}},O=async e=>{try{if(null!=s&&null!=x){h.ZP.info("Making API Call"),e.user_email,e.user_id;let l=await D(s,e,"proxy_admin");console.log("response for team create call: ".concat(l));let t=x.findIndex(e=>(console.log("user.user_id=".concat(e.user_id,"; response.user_id=").concat(l.user_id)),e.user_id===l.user_id));console.log("foundIndex: ".concat(t)),-1==t&&(console.log("updates admin with new user"),x.push(l),p(x)),Z(!1)}}catch(e){console.error("Error creating the key:",e)}},M=async e=>{null!=s&&V(s,{environment_variables:{PROXY_BASE_URL:e.proxy_base_url,GOOGLE_CLIENT_ID:e.google_client_id,GOOGLE_CLIENT_SECRET:e.google_client_secret}})};return console.log("admins: ".concat(null==x?void 0:x.length)),(0,r.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,r.jsx)(c,{level:4,children:"Admin Access "}),(0,r.jsxs)(d,{children:[a&&(0,r.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/ui#restrict-ui-access",children:"Requires SSO Setup"}),(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin: "})," Can create keys, teams, users, add models, etc. ",(0,r.jsx)("br",{}),(0,r.jsx)("b",{children:"Proxy Admin Viewer: "}),"Can just view spend. They cannot create keys, teams or grant users access to new models."," "]}),(0,r.jsxs)(J.Z,{numItems:1,className:"gap-2 p-2 w-full",children:[(0,r.jsx)(G.Z,{numColSpan:1,children:(0,r.jsx)(ex.Z,{className:"w-full mx-auto flex-auto overflow-y-auto max-h-[50vh]",children:(0,r.jsxs)(ey.Z,{children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"Member Name"}),(0,r.jsx)(eb.Z,{children:"Role"})]})}),(0,r.jsx)(eZ.Z,{children:x?x.map((e,l)=>(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{children:e.user_email?e.user_email:e.user_id?e.user_id:null}),(0,r.jsx)(ef.Z,{children:e.user_role}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)(eg.Z,{icon:ed.Z,size:"sm",onClick:()=>w(!0)}),(0,r.jsx)(es.Z,{title:"Update role",visible:f,width:800,footer:null,onOk:N,onCancel:I,children:P(T,e.user_role,e.user_id)})]})]},l)):null})]})})}),(0,r.jsx)(G.Z,{numColSpan:1,children:(0,r.jsxs)("div",{className:"flex justify-start",children:[(0,r.jsx)(W.Z,{className:"mr-4 mb-5",onClick:()=>Z(!0),children:"+ Add admin"}),(0,r.jsx)(es.Z,{title:"Add admin",visible:y,width:800,footer:null,onOk:()=>{Z(!1),i.resetFields()},onCancel:()=>{Z(!1),i.resetFields()},children:C(O)}),(0,r.jsx)(W.Z,{className:"mb-5",onClick:()=>g(!0),children:"+ Add viewer"}),(0,r.jsx)(es.Z,{title:"Add viewer",visible:j,width:800,footer:null,onOk:()=>{g(!1),i.resetFields()},onCancel:()=>{g(!1),i.resetFields()},children:C(E)})]})})]}),(0,r.jsxs)(J.Z,{children:[(0,r.jsx)(c,{level:4,children:"Add SSO"}),(0,r.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,r.jsx)(W.Z,{onClick:()=>_(!0),children:"Add SSO"}),(0,r.jsx)(es.Z,{title:"Add SSO",visible:b,width:800,footer:null,onOk:()=>{_(!1),o.resetFields()},onCancel:()=>{_(!1),o.resetFields()},children:(0,r.jsxs)(et.Z,{form:o,onFinish:e=>{O(e),M(e),_(!1),v(!0)},labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"PROXY BASE URL",name:"proxy_base_url",rules:[{required:!0,message:"Please enter the proxy base url"}],children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)(et.Z.Item,{label:"GOOGLE CLIENT ID",name:"google_client_id",rules:[{required:!0,message:"Please enter the google client id"}],children:(0,r.jsx)(ea.Z.Password,{})}),(0,r.jsx)(et.Z.Item,{label:"GOOGLE CLIENT SECRET",name:"google_client_secret",rules:[{required:!0,message:"Please enter the google client secret"}],children:(0,r.jsx)(ea.Z.Password,{})})]}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Save"})})]})}),(0,r.jsxs)(es.Z,{title:"SSO Setup Instructions",visible:k,width:800,footer:null,onOk:S,onCancel:()=>{v(!1)},children:[(0,r.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,r.jsx)(X.Z,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,r.jsx)(X.Z,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,r.jsx)(X.Z,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,r.jsx)(X.Z,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{onClick:S,children:"Done"})})]})]}),(0,r.jsxs)(e3.Z,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access ",(0,r.jsxs)("a",{href:l,target:"_blank",children:[(0,r.jsx)("b",{children:l})," "]})]})]})]})},e6=e=>{let{accessToken:l,userRole:t,userID:s}=e,[a,o]=(0,n.useState)([]),[i,c]=(0,n.useState)(!1),[d]=et.Z.useForm(),[m,u]=(0,n.useState)(null),[x,p]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e),o(e.data)})},[l,t,s]);let j=e=>{p(e),console.log("Selected values:",e)},g=e=>{if(!l)return;let t=Object.fromEntries(Object.entries(e.variables).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t),console.log("updateAlertTypes",x);try{V(l,{environment_variables:t,general_settings:{alert_types:x}})}catch(e){h.ZP.error("Failed to update callback: "+e,20)}h.ZP.success("Callback updated successfully")},y=()=>{l&&d.validateFields().then(e=>{console.log("Form values:",e),"langfuse"===e.callback?(V(l,{environment_variables:{LANGFUSE_PUBLIC_KEY:e.langfusePublicKey,LANGFUSE_SECRET_KEY:e.langfusePrivateKey},litellm_settings:{success_callback:[e.callback]}}),o(a?[...a,e.callback]:[e.callback])):"slack"===e.callback&&(V(l,{general_settings:{alerting:["slack"],alerting_threshold:300},environment_variables:{SLACK_WEBHOOK_URL:e.slackWebhookUrl}}),o(a?[...a,e.callback]:[e.callback])),c(!1),d.resetFields(),u(null)})};return l?(0,r.jsxs)("div",{className:"w-full mx-4",children:[(0,r.jsxs)(J.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(Q.Z,{children:"Logging Callbacks"}),(0,r.jsxs)(ex.Z,{children:[(0,r.jsxs)(ey.Z,{children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"Callback"}),(0,r.jsx)(eb.Z,{children:"Callback Env Vars"})]})}),(0,r.jsx)(eZ.Z,{children:a.map((e,t)=>(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(eh.Z,{color:"emerald",children:e.name})}),(0,r.jsxs)(ef.Z,{children:[(0,r.jsx)("ul",{children:Object.entries(e.variables).map(e=>{let[l,t]=e;return(0,r.jsxs)("li",{children:[(0,r.jsx)(X.Z,{className:"mt-2",children:l}),"LANGFUSE_HOST"===l?(0,r.jsx)("p",{children:"default value=https://cloud.langfuse.com"}):(0,r.jsx)("div",{}),(0,r.jsx)(ez.Z,{name:l,defaultValue:t,type:"password"})]},l)})}),e.all_alert_types&&(0,r.jsxs)("div",{children:[(0,r.jsx)(X.Z,{className:"mt-2",children:"Alerting Types"}),(0,r.jsx)(el.default,{mode:"multiple",style:{width:"100%"},placeholder:"Select Alerting Types",optionLabelProp:"label",onChange:j,defaultValue:e.alerting_types,children:e.all_alert_types.map(e=>(0,r.jsx)(el.default.Option,{value:e,label:e,children:e},e))})]}),(0,r.jsx)(W.Z,{className:"mt-2",onClick:()=>g(e),children:"Save Changes"}),(0,r.jsx)(W.Z,{onClick:()=>B(l,e.name),className:"mx-2",children:"Test Callback"})]})]},t))})]}),(0,r.jsx)(W.Z,{size:"xs",className:"mt-2",onClick:()=>{console.log("Add callback clicked"),c(!0)},children:"Add Callback"})]})]}),(0,r.jsx)(es.Z,{title:"Add Callback",visible:i,onOk:y,width:800,onCancel:()=>{c(!1),d.resetFields(),u(null)},footer:null,children:(0,r.jsxs)(et.Z,{form:d,layout:"vertical",onFinish:y,children:[(0,r.jsx)(et.Z.Item,{label:"Callback",name:"callback",rules:[{required:!0,message:"Please select a callback"}],children:(0,r.jsxs)(el.default,{onChange:e=>{u(e)},children:[(0,r.jsx)(el.default.Option,{value:"langfuse",children:"langfuse"}),(0,r.jsx)(el.default.Option,{value:"slack",children:"slack alerting"})]})}),"langfuse"===m&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(et.Z.Item,{label:"LANGFUSE_PUBLIC_KEY",name:"langfusePublicKey",rules:[{required:!0,message:"Please enter the public key"}],children:(0,r.jsx)(ea.Z.Password,{})}),(0,r.jsx)(et.Z.Item,{label:"LANGFUSE_PRIVATE_KEY",name:"langfusePrivateKey",rules:[{required:!0,message:"Please enter the private key"}],children:(0,r.jsx)(ea.Z.Password,{})})]}),"slack"===m&&(0,r.jsx)(et.Z.Item,{label:"SLACK_WEBHOOK_URL",name:"slackWebhookUrl",rules:[{required:!0,message:"Please enter the Slack webhook URL"}],children:(0,r.jsx)(ea.Z,{})}),(0,r.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,r.jsx)(en.ZP,{htmlType:"submit",children:"Save"})})]})})]}):null},e7=e=>{let{accessToken:l,userRole:t,userID:s}=e,[a,o]=(0,n.useState)({}),[i,c]=(0,n.useState)(!1),[d]=et.Z.useForm(),[m,u]=(0,n.useState)(null);(0,n.useEffect)(()=>{l&&t&&s&&q(l,s,t).then(e=>{console.log("callbacks",e),o(e.router_settings)})},[l,t,s]);let x=e=>{if(!l)return;console.log("router_settings",e);let t=Object.fromEntries(Object.entries(e).map(e=>{var l;let[t,s]=e;return[t,(null===(l=document.querySelector('input[name="'.concat(t,'"]')))||void 0===l?void 0:l.value)||s]}));console.log("updatedVariables",t);try{V(l,{router_settings:t})}catch(e){h.ZP.error("Failed to update router settings: "+e,20)}h.ZP.success("router settings updated successfully")};return l?(0,r.jsx)("div",{className:"w-full mx-4",children:(0,r.jsxs)(J.Z,{numItems:1,className:"gap-2 p-8 w-full mt-2",children:[(0,r.jsx)(Q.Z,{children:"Router Settings"}),(0,r.jsx)(ex.Z,{children:(0,r.jsxs)(ey.Z,{children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"Setting"}),(0,r.jsx)(eb.Z,{children:"Value"})]})}),(0,r.jsx)(eZ.Z,{children:Object.entries(a).map(e=>{let[l,t]=e;return(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{children:(0,r.jsx)(X.Z,{children:l})}),(0,r.jsx)(ef.Z,{children:(0,r.jsx)(ez.Z,{name:l,defaultValue:"object"==typeof t?JSON.stringify(t,null,2):t.toString()})})]},l)})})]})}),(0,r.jsx)(G.Z,{children:(0,r.jsx)(W.Z,{className:"mt-2",onClick:()=>x(a),children:"Save Changes"})})]})}):null},e9=t(67951),le=e=>{let{}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(J.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsxs)("div",{className:"mb-5",children:[(0,r.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,r.jsx)(X.Z,{className:"mt-2 mb-2",children:"LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below "}),(0,r.jsxs)(eR.Z,{children:[(0,r.jsxs)(eL.Z,{children:[(0,r.jsx)(eM.Z,{children:"OpenAI Python SDK"}),(0,r.jsx)(eM.Z,{children:"LlamaIndex"}),(0,r.jsx)(eM.Z,{children:"Langchain Py"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsx)(e9.Z,{language:"python",children:'\nimport openai\nclient = openai.OpenAI(\n api_key="your_api_key",\n base_url="http://0.0.0.0:4000" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys\n)\n\nresponse = client.chat.completions.create(\n model="gpt-3.5-turbo", # model to send to the proxy\n messages = [\n {\n "role": "user",\n "content": "this is a test request, write a short poem"\n }\n ]\n)\n\nprint(response)\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(e9.Z,{language:"python",children:'\nimport os, dotenv\n\nfrom llama_index.llms import AzureOpenAI\nfrom llama_index.embeddings import AzureOpenAIEmbedding\nfrom llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext\n\nllm = AzureOpenAI(\n engine="azure-gpt-3.5", # model_name on litellm proxy\n temperature=0.0,\n azure_endpoint="http://0.0.0.0:4000", # litellm proxy endpoint\n api_key="sk-1234", # litellm proxy API Key\n api_version="2023-07-01-preview",\n)\n\nembed_model = AzureOpenAIEmbedding(\n deployment_name="azure-embedding-model",\n azure_endpoint="http://0.0.0.0:4000",\n api_key="sk-1234",\n api_version="2023-07-01-preview",\n)\n\n\ndocuments = SimpleDirectoryReader("llama_index_data").load_data()\nservice_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)\nindex = VectorStoreIndex.from_documents(documents, service_context=service_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query("What did the author do growing up?")\nprint(response)\n\n '})}),(0,r.jsx)(eU.Z,{children:(0,r.jsx)(e9.Z,{language:"python",children:'\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.prompts.chat import (\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n SystemMessagePromptTemplate,\n)\nfrom langchain.schema import HumanMessage, SystemMessage\n\nchat = ChatOpenAI(\n openai_api_base="http://0.0.0.0:4000",\n model = "gpt-3.5-turbo",\n temperature=0.1\n)\n\nmessages = [\n SystemMessage(\n content="You are a helpful assistant that im using to make a test request to."\n ),\n HumanMessage(\n content="test from litellm. tell me why it\'s amazing in 1 sentence"\n ),\n]\nresponse = chat(messages)\n\nprint(response)\n\n '})})]})]})]})})})},ll=t(12968);async function lt(e,l,t,s){console.log("isLocal:",!1);let a=window.location.origin,r=new ll.ZP.OpenAI({apiKey:s,baseURL:a,dangerouslyAllowBrowser:!0});try{for await(let s of(await r.chat.completions.create({model:t,stream:!0,messages:[{role:"user",content:e}]})))console.log(s),s.choices[0].delta.content&&l(s.choices[0].delta.content)}catch(e){h.ZP.error("Error occurred while generating model response. Please try again. Error: ".concat(e),20)}}var ls=e=>{let{accessToken:l,token:t,userRole:s,userID:a}=e,[o,i]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[m,h]=(0,n.useState)([]),[u,x]=(0,n.useState)(void 0),[p,j]=(0,n.useState)([]);(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{let e=await k(l,a,s);if(console.log("model_info:",e),(null==e?void 0:e.data.length)>0){let l=e.data.map(e=>({value:e.id,label:e.id}));console.log(l),j(l),x(e.data[0].id)}}catch(e){console.error("Error fetching model info:",e)}})()},[l,a,s]);let g=(e,l)=>{h(t=>{let s=t[t.length-1];return s&&s.role===e?[...t.slice(0,t.length-1),{role:e,content:s.content+l}]:[...t,{role:e,content:l}]})},y=async()=>{if(""!==c.trim()&&o&&t&&s&&a){h(e=>[...e,{role:"user",content:c}]);try{u&&await lt(c,e=>g("assistant",e),u,o)}catch(e){console.error("Error fetching model response",e),g("assistant","Error fetching model response")}d("")}};if(s&&"Admin Viewer"==s){let{Title:e,Paragraph:l}=eO.default;return(0,r.jsxs)("div",{children:[(0,r.jsx)(e,{level:1,children:"Access Denied"}),(0,r.jsx)(l,{children:"Ask your proxy admin for access to test models"})]})}return(0,r.jsx)("div",{style:{width:"100%",position:"relative"},children:(0,r.jsx)(J.Z,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,r.jsx)(ex.Z,{children:(0,r.jsxs)(eR.Z,{children:[(0,r.jsx)(eL.Z,{children:(0,r.jsx)(eM.Z,{children:"Chat"})}),(0,r.jsx)(eD.Z,{children:(0,r.jsxs)(eU.Z,{children:[(0,r.jsx)("div",{className:"sm:max-w-2xl",children:(0,r.jsxs)(J.Z,{numItems:2,children:[(0,r.jsxs)(G.Z,{children:[(0,r.jsx)(X.Z,{children:"API Key"}),(0,r.jsx)(ez.Z,{placeholder:"Type API Key here",type:"password",onValueChange:i,value:o})]}),(0,r.jsxs)(G.Z,{className:"mx-2",children:[(0,r.jsx)(X.Z,{children:"Select Model:"}),(0,r.jsx)(el.default,{placeholder:"Select a Model",onChange:e=>{console.log("selected ".concat(e)),x(e)},options:p,style:{width:"200px"}})]})]})}),(0,r.jsxs)(ey.Z,{className:"mt-5",style:{display:"block",maxHeight:"60vh",overflowY:"auto"},children:[(0,r.jsx)(ew.Z,{children:(0,r.jsx)(e_.Z,{children:(0,r.jsx)(ef.Z,{})})}),(0,r.jsx)(eZ.Z,{children:m.map((e,l)=>(0,r.jsx)(e_.Z,{children:(0,r.jsx)(ef.Z,{children:"".concat(e.role,": ").concat(e.content)})},l))})]}),(0,r.jsx)("div",{className:"mt-3",style:{position:"absolute",bottom:5,width:"95%"},children:(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsx)(ez.Z,{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"Type your message..."}),(0,r.jsx)(W.Z,{onClick:y,className:"ml-2",children:"Send"})]})})]})})]})})})})},la=t(33509),lr=t(95781);let{Sider:ln}=la.default;var lo=e=>{let{setPage:l,userRole:t,defaultSelectedKey:s}=e;return"Admin Viewer"==t?(0,r.jsx)(la.default,{style:{minHeight:"100vh",maxWidth:"120px"},children:(0,r.jsx)(ln,{width:120,children:(0,r.jsxs)(lr.Z,{mode:"inline",defaultSelectedKeys:s||["4"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(lr.Z.Item,{onClick:()=>l("api-keys"),children:"API Keys"},"4"),(0,r.jsx)(lr.Z.Item,{onClick:()=>l("models"),children:"Models"},"2"),(0,r.jsx)(lr.Z.Item,{onClick:()=>l("llm-playground"),children:"Chat UI"},"3"),(0,r.jsx)(lr.Z.Item,{onClick:()=>l("usage"),children:"Usage"},"1")]})})}):(0,r.jsx)(la.default,{style:{minHeight:"100vh",maxWidth:"130px"},children:(0,r.jsx)(ln,{width:130,children:(0,r.jsxs)(lr.Z,{mode:"inline",defaultSelectedKeys:s||["1"],style:{height:"100%",borderRight:0},children:[(0,r.jsx)(lr.Z.Item,{onClick:()=>l("api-keys"),children:(0,r.jsx)(X.Z,{children:"API Keys"})},"1"),(0,r.jsx)(lr.Z.Item,{onClick:()=>l("llm-playground"),children:(0,r.jsx)(X.Z,{children:"Test Key"})},"3"),(0,r.jsx)(lr.Z.Item,{onClick:()=>l("api_ref"),children:(0,r.jsx)(X.Z,{children:"API Reference"})},"11"),"Admin"==t?(0,r.jsx)(lr.Z.Item,{onClick:()=>l("models"),children:(0,r.jsx)(X.Z,{children:"Models"})},"2"):null,"Admin"==t?(0,r.jsx)(lr.Z.Item,{onClick:()=>l("teams"),children:(0,r.jsx)(X.Z,{children:"Teams"})},"6"):null,"Admin"==t?(0,r.jsx)(lr.Z.Item,{onClick:()=>l("usage"),children:(0,r.jsx)(X.Z,{children:"Usage"})},"4"):null,"Admin"==t?(0,r.jsx)(lr.Z.Item,{onClick:()=>l("users"),children:(0,r.jsx)(X.Z,{children:"Users"})},"5"):null,"Admin"==t?(0,r.jsx)(lr.Z.Item,{onClick:()=>l("settings"),children:(0,r.jsx)(X.Z,{children:"Integrations"})},"8"):null,"Admin"==t?(0,r.jsx)(lr.Z.Item,{onClick:()=>l("general-settings"),children:(0,r.jsx)(X.Z,{children:"Settings"})},"9"):null,"Admin"==t?(0,r.jsx)(lr.Z.Item,{onClick:()=>l("admin-panel"),children:(0,r.jsx)(X.Z,{children:"Admin"})},"7"):null]})})})},li=t(67989),lc=e=>{let{accessToken:l,token:t,userRole:s,userID:a}=e,o=new Date,[i,c]=(0,n.useState)([]),[d,m]=(0,n.useState)([]),[h,u]=(0,n.useState)([]),[x,p]=(0,n.useState)([]),[j,g]=(0,n.useState)([]),[y,Z]=(0,n.useState)([]),[f,w]=(0,n.useState)([]),[b,k]=(0,n.useState)([]),[v,P]=(0,n.useState)([]),[O,F]=(0,n.useState)([]),M=new Date(o.getFullYear(),o.getMonth(),1),R=new Date(o.getFullYear(),o.getMonth()+1,0),L=D(M),U=D(R);function D(e){let l=e.getFullYear(),t=e.getMonth()+1,s=e.getDate();return"".concat(l,"-").concat(t<10?"0"+t:t,"-").concat(s<10?"0"+s:s)}return console.log("Start date is ".concat(L)),console.log("End date is ".concat(U)),(0,n.useEffect)(()=>{l&&t&&s&&a&&(async()=>{try{if(console.log("user role: ".concat(s)),"Admin"==s||"Admin Viewer"==s){let e=await I(l);c(e);let t=(await C(l)).map(e=>({key:(e.key_name||e.key_alias||e.api_key).substring(0,10),spend:e.total_spend}));m(t);let s=(await T(l)).map(e=>({key:e.model,spend:e.total_spend}));u(s);let a=await S(l);console.log("teamSpend",a),g(a.daily_spend),w(a.teams);let r=a.total_spend_per_team;r=r.map(e=>(e.name=e.team_id||"",e.value=e.total_spend||0,e)),k(r);let n=await A(l);Z(n.top_10_tags)}else"App Owner"==s&&await N(l,t,s,a,L,U).then(async e=>{if(console.log("result from spend logs call",e),"daily_spend"in e){let l=e.daily_spend;console.log("daily spend",l),c(l);let t=e.top_api_keys;m(t)}else{let t=(await E(l,function(e){let l=[];e.forEach(e=>{Object.entries(e).forEach(e=>{let[t,s]=e;"spend"!==t&&"startTime"!==t&&"models"!==t&&"users"!==t&&l.push({key:t,spend:s})})}),l.sort((e,l)=>Number(l.spend)-Number(e.spend));let t=l.slice(0,5).map(e=>e.key);return console.log("topKeys: ".concat(Object.keys(t[0]))),t}(e))).info.map(e=>({key:(e.key_name||e.key_alias).substring(0,10),spend:e.spend}));m(t),p(function(e){let l={};e.forEach(e=>{Object.entries(e.users).forEach(e=>{let[t,s]=e;""!==t&&null!=t&&"None"!=t&&(l[t]||(l[t]=0),l[t]+=s)})});let t=Object.entries(l).map(e=>{let[l,t]=e;return{user_id:l,spend:t}});t.sort((e,l)=>l.spend-e.spend);let s=t.slice(0,5);return console.log("topKeys: ".concat(Object.values(s[0]))),s}(e)),c(e)}});let e=await _(l,a,s);console.log("Model metrics response:",e);let r=[...e].sort((e,l)=>l.avg_latency_seconds-e.avg_latency_seconds);console.log("Sorted by latency:",r),P(e),F(r)}catch(e){console.error("There was an error fetching the data",e)}})()},[l,t,s,a,L,U]),(0,r.jsxs)("div",{style:{width:"100%"},className:"p-8",children:[(0,r.jsx)(eC,{userID:a,userRole:s,accessToken:l,userSpend:null,selectedTeam:null}),(0,r.jsxs)(eR.Z,{children:[(0,r.jsxs)(eL.Z,{className:"mt-2",children:[(0,r.jsx)(eM.Z,{children:"All Up"}),(0,r.jsx)(eM.Z,{children:"Team Based Usage"}),(0,r.jsx)(eM.Z,{children:"Tag Based Usage"}),(0,r.jsx)(eM.Z,{children:"Model Based Usage"})]}),(0,r.jsxs)(eD.Z,{children:[(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(J.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsx)(G.Z,{numColSpan:2,children:(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)(Q.Z,{children:"Monthly Spend"}),(0,r.jsx)(eu.Z,{data:i,index:"date",categories:["spend"],colors:["blue"],valueFormatter:e=>"$ ".concat(new Intl.NumberFormat("us").format(e).toString()),yAxisWidth:100,tickGap:5})]})}),(0,r.jsx)(G.Z,{numColSpan:1,children:(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)(Q.Z,{children:"Top API Keys"}),(0,r.jsx)(eu.Z,{className:"mt-4 h-40",data:d,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:80,tickGap:5,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(G.Z,{numColSpan:1,children:(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)(Q.Z,{children:"Top Users"}),(0,r.jsx)(eu.Z,{className:"mt-4 h-40",data:x,index:"user_id",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})}),(0,r.jsx)(G.Z,{numColSpan:1,children:(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)(Q.Z,{children:"Top Models"}),(0,r.jsx)(eu.Z,{className:"mt-4 h-40",data:h,index:"key",categories:["spend"],colors:["blue"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1})]})})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(J.Z,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,r.jsxs)(G.Z,{numColSpan:2,children:[(0,r.jsxs)(ex.Z,{className:"mb-2",children:[(0,r.jsx)(Q.Z,{children:"Total Spend Per Team"}),(0,r.jsx)(li.Z,{data:b})]}),(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)(Q.Z,{children:"Daily Spend Per Team"}),(0,r.jsx)(eu.Z,{className:"h-72",data:j,showLegend:!0,index:"date",categories:f,yAxisWidth:80,stack:!0})]})]}),(0,r.jsx)(G.Z,{numColSpan:2})]})}),(0,r.jsx)(eU.Z,{children:(0,r.jsxs)(J.Z,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,r.jsx)(G.Z,{numColSpan:2,children:(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)(Q.Z,{children:"Spend Per Tag - Last 30 Days"}),(0,r.jsxs)(X.Z,{children:["Get Started Tracking cost per tag ",(0,r.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/enterprise#tracking-spend-for-custom-tags",target:"_blank",children:"here"})]}),(0,r.jsxs)(ey.Z,{children:[(0,r.jsx)(ew.Z,{children:(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(eb.Z,{children:"Tag"}),(0,r.jsx)(eb.Z,{children:"Spend"}),(0,r.jsx)(eb.Z,{children:"Requests"})]})}),(0,r.jsx)(eZ.Z,{children:y.map(e=>(0,r.jsxs)(e_.Z,{children:[(0,r.jsx)(ef.Z,{children:e.name}),(0,r.jsx)(ef.Z,{children:e.value}),(0,r.jsx)(ef.Z,{children:e.log_count})]},e.name))})]})]})}),(0,r.jsx)(G.Z,{numColSpan:2})]})}),(0,r.jsxs)(eU.Z,{children:[(0,r.jsxs)(ex.Z,{children:[(0,r.jsx)(Q.Z,{children:"Number Requests per Model"}),(0,r.jsx)(eu.Z,{data:v,className:"h-[50vh]",index:"model",categories:["num_requests"],colors:["blue"],yAxisWidth:400,layout:"vertical",tickGap:5})]}),(0,r.jsxs)(ex.Z,{className:"mt-4",children:[(0,r.jsx)(Q.Z,{children:"Latency Per Model"}),(0,r.jsx)(eu.Z,{data:O,className:"h-[50vh]",index:"model",categories:["avg_latency_seconds"],colors:["red"],yAxisWidth:400,layout:"vertical",tickGap:5})]})]})]})]})]})},ld=()=>{let{Title:e,Paragraph:l}=eO.default,[t,s]=(0,n.useState)(""),[a,i]=(0,n.useState)(null),[c,d]=(0,n.useState)(null),[h,u]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0),j=(0,o.useSearchParams)(),g=j.get("userID"),y=j.get("token"),[Z,f]=(0,n.useState)("api-keys"),[w,b]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(y){let e=(0,eE.o)(y);if(e){if(console.log("Decoded token:",e),console.log("Decoded key:",e.key),b(e.key),e.user_role){let l=function(e){if(!e)return"Undefined Role";switch(console.log("Received user role: ".concat(e.toLowerCase())),console.log("Received user role length: ".concat(e.toLowerCase().length)),e.toLowerCase()){case"app_owner":case"demo_app_owner":return"App Owner";case"app_admin":case"proxy_admin":return"Admin";case"proxy_admin_viewer":return"Admin Viewer";case"app_user":return"App User";default:return"Unknown Role"}}(e.user_role);console.log("Decoded user_role:",l),s(l),"Admin Viewer"==l&&f("usage")}else console.log("User role not defined");e.user_email?i(e.user_email):console.log("User Email is not set ".concat(e)),e.login_method?p("username_password"==e.login_method):console.log("User Email is not set ".concat(e))}}},[y]),(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{children:"Loading..."}),children:(0,r.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,r.jsx)(m,{userID:g,userRole:t,userEmail:a,showSSOBanner:x}),(0,r.jsxs)("div",{className:"flex flex-1 overflow-auto",children:[(0,r.jsx)("div",{className:"mt-8",children:(0,r.jsx)(lo,{setPage:f,userRole:t,defaultSelectedKey:null})}),"api-keys"==Z?(0,r.jsx)(eF,{userID:g,userRole:t,teams:c,keys:h,setUserRole:s,userEmail:a,setUserEmail:i,setTeams:d,setKeys:u}):"models"==Z?(0,r.jsx)(e0,{userID:g,userRole:t,token:y,accessToken:w}):"llm-playground"==Z?(0,r.jsx)(ls,{userID:g,userRole:t,token:y,accessToken:w}):"users"==Z?(0,r.jsx)(e4,{userID:g,userRole:t,token:y,keys:h,teams:c,accessToken:w,setKeys:u}):"teams"==Z?(0,r.jsx)(e8,{teams:c,setTeams:d,searchParams:j,accessToken:w,userID:g,userRole:t}):"admin-panel"==Z?(0,r.jsx)(e5,{setTeams:d,searchParams:j,accessToken:w,showSSOBanner:x}):"api_ref"==Z?(0,r.jsx)(le,{}):"settings"==Z?(0,r.jsx)(e6,{userID:g,userRole:t,accessToken:w}):"general-settings"==Z?(0,r.jsx)(e7,{userID:g,userRole:t,accessToken:w}):(0,r.jsx)(lc,{userID:g,userRole:t,token:y,accessToken:w})]})]})})}}},function(e){e.O(0,[294,971,69,744],function(){return e(e.s=20661)}),_N_E=e.O()}]);