1"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["11294"],{1751(e,t,a){a.d(t,{A:()=>r});var i,s=a(96540);function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)({}).hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e}).apply(null,arguments)}let r=({title:e,titleId:t,...a})=>s.createElement("svg",n({xmlns:"http://www.w3.org/2000/svg",width:109,height:40,fill:"none",viewBox:"0 0 109 40","aria-labelledby":t},a),e?s.createElement("title",{id:t},e):null,i||(i=s.createElement("path",{fill:"#fff",d:"M0 31.032v-15.53h3.543v1.968c.893-1.594 2.84-2.425 4.593-2.425 2.042 0 3.828.926 4.658 2.745 1.216-2.043 3.034-2.745 5.043-2.745 2.81 0 5.49 1.787 5.49 5.904v10.083h-3.574v-9.478c0-1.818-.926-3.19-3-3.19-1.947 0-3.224 1.53-3.224 3.445v9.22H9.893v-9.475c0-1.786-.898-3.18-3.003-3.18-1.977 0-3.223 1.467-3.223 3.444v9.221ZM27.855 31.032V7.929h3.703v23.103ZM30.07 39.487c.833.232 1.582.383 3.17.383 2.953 0 6.436-1.665 7.353-6.339l3.786-18.739h5.629l.687-3.117h-5.686l.765-3.725c.586-2.892 2.186-4.358 4.754-4.358.668 0 .48.058 1.076.17L52.427.57c-.793-.237-1.503-.379-3.049-.379a7.32 7.32 0 0 0-4.528 1.484c-1.441 1.114-2.393 2.75-2.827 4.863l-1.066 5.137h-5.034l-.411 3.12h4.823L36.859 32.12c-.383 1.965-1.5 4.315-4.708 4.315-.727 0-.463-.055-1.121-.162ZM53.342 30.905H49.64l5.074-23.309h3.701ZM71.807 16.477A7.962 7.962 0 0 0 60.97 27.904l2.425-1.78a5.005 5.005 0 0 1 3.845-8.145v1.895ZM62.618 29.472a7.962 7.962 0 0 0 10.836-11.428l-2.425 1.78a5.005 5.005 0 0 1-3.845 8.145v-1.894ZM78.092 15.493h4.044l.823 10.612 5.759-10.612 3.839.055 1.508 10.557 5.074-10.612 3.701.055-7.678 15.493H91.46l-1.783-11.106-5.895 11.106h-3.84ZM105.072 15.768h-.766v-.266h1.845v.272h-.765v2.243h-.314ZM106.614 15.502h.383l.482 1.34q.091.259.178.524h.018c.059-.176.113-.352.172-.524l.478-1.34h.383v2.515h-.298V16.63c0-.22.024-.523.04-.747h-.016l-.191.574-.475 1.304h-.208l-.481-1.302-.191-.574h-.015c.017.224.042.527.042.747v1.387h-.291Z"})))},24937(e,t,a){a.d(t,{B:()=>r});var i=a(74848),s=a(96540),n=a(57432);function r(){let[e,t]=(0,s.useState)([]);return((0,s.useEffect)(()=>{let e=document.querySelector(".article-container");if(!e)return;let a=e.querySelectorAll("h2[id]"),i=[];a.forEach(e=>{i.push({id:e.id,text:e.getAttribute("data-toc")||e.textContent||""})}),t(i)},[]),0===e.length)?null:(0,i.jsxs)("aside",{className:"article-sidebar",children:[(0,i.jsx)("p",{className:"toc-title",children:"On this page"}),(0,i.jsx)("ul",{children:e.map(e=>(0,i.jsx)("li",{children:(0,i.jsx)("a",{href:`#${e.id}`,children:e.text})},e.id))}),(0,i.jsx)("hr",{className:"toc-divider"}),(0,i.jsx)("p",{className:"toc-title",children:"Resources"}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:(0,i.jsx)("a",{href:"/faq",children:"MLflow FAQ"})}),(0,i.jsx)("li",{children:(0,i.jsx)("a",{href:n.jT,children:"Documentation"})}),(0,i.jsx)("li",{children:(0,i.jsx)("a",{href:"https://go.mlflow.org/slack",children:"Slack"})}),(0,i.jsx)("li",{children:(0,i.jsx)("a",{href:"https://github.com/mlflow/mlflow",children:"GitHub"})})]})]})}},35209(e,t,a){a.d(t,{$:()=>r});var i=a(74848),s=a(96540);let n=(0,a(22732).F)("rounded-xl inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:cursor-pointer",{variants:{variant:{primary:"bg-white text-black hover:bg-gray-900",outline:"box-border border border-white bg-transparent text-white hover:text-gray-900",secondary:"bg-black text-white hover:bg-black/80",dark:"bg-white/12 text-white hover:bg-gray-100 border border-gray-200",blue:"bg-[#0094E2] text-white hover:bg-[#0094E2]/80"},size:{small:"text-[15px] px-4 py-2",medium:"text-base px-4 py-4",large:"text-base px-5 py-4"},width:{default:"w-fit",full:"w-full"}},defaultVariants:{variant:"primary",size:"medium",width:"default"}}),r=s.forwardRef(({className:e,variant:t,size:a,width:s,asChild:r=!1,...o},l)=>(0,i.jsx)("button",{className:n({variant:t,size:a,width:s,className:e}),ref:l,...o}));r.displayName="Button"},77114(e,t,a){a.d(t,{i:()=>o});var i=a(74848),s=a(96540),n=a(49548),r=a(11490);let o=({code:e,className:t=""})=>
1{let[a,o]=(0,s.useState)(!1),l=(0,s.useCallback)(async()=>{try{await navigator.clipboard.writeText(e),o(!0),setTimeout(()=>o(!1),2e3)}catch{}},[e]);return(0,i.jsx)("button",{onClick:l,className:`p-1.5 rounded bg-white/10 hover:bg-white/20 transition-colors ${t}`,"aria-label":a?"Copied!":"Copy code",children:(0,i.jsx)(n.N,{mode:"wait",initial:!1,children:a?(0,i.jsx)(r.P.svg,{initial:{scale:0},animate:{scale:1},exit:{scale:0},className:"w-4 h-4 text-green-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,i.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})},"check"):(0,i.jsx)(r.P.svg,{initial:{scale:0},animate:{scale:1},exit:{scale:0},className:"w-4 h-4 text-white/50 hover:text-white/80",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,i.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})},"copy")})})}},50321(e,t,a){a.d(t,{AS:()=>s,o:()=>r,zv:()=>n});var i=a(71765);let s={...i.Zj.nightOwl,styles:i.Zj.nightOwl.styles.map(e=>e.types.includes("string")?{...e,style:{...e.style,color:"#58a6ff"}}:e)},n={...i.Zj.nightOwl,styles:i.Zj.nightOwl.styles.map(e=>e.types.includes("string")?{...e,style:{...e.style,color:"#ff7b72"}}:e.types.includes("keyword")?{...e,style:{...e.style,color:"#ff6b8a"}}:e.types.includes("function")?{...e,style:{...e.style,color:"#ffa0a0"}}:e.types.includes("operator")||e.types.includes("punctuation")?{...e,style:{...e.style,color:"#f97583"}}:e)},r="#0d1117"},11651(e,t,a){a.d(t,{Y:()=>_});var i,s=a(74848),n=a(96540),r=a(95310),o=a(56347),l=a(66497),c=a(1751);function d(){return(d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)({}).hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e}).apply(null,arguments)}let h=({title:e,titleId:t,...a})=>n.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",width:16,height:17,fill:"none",viewBox:"0 0 16 17","aria-labelledby":t},a),e?n.createElement("title",{id:t},e):null,i||(i=n.createElement("path",{fill:"#F7F8F8",fillRule:"evenodd",d:"m8 10.776 3.61-3.61-.943-.942L8 8.89 5.333 6.224l-.942.943z",clipRule:"evenodd"})));var p=a(53440),m=a(98749),u=a(41181),g=a(35209);let x=({href:e,label:t,className:a,onMouseEnter:i,hasDropdown:n,...o})=>(0,s.jsxs)(r.A,{href:e,className:(0,p.cn)("flex items-center gap-2 py-2 text-white text-lg w-full md:w-auto cursor-pointer transition-colors duration-200 hover:!text-white/60",a),...o,children:[t,n&&(0,s.jsx)(h,{className:"w-6 h-6"})]});var f=a(22732);let w=(0,f.F)("flex flex-col md:flex-row md:max-w-4xl mx-auto gap-6 md:gap-8 lg:gap-10 px-1 md:px-4 lg:pl-0 products-submenu overflow-x-hidden"),b=(0,f.F)("flex flex-col gap-4"),y=(0,f.F)("flex flex-col gap-1 md:gap-4 border-b border-[#F7F8F8]/8 pb-4 group"),j=(0,f.F)("text-white transition-colors duration-200 group-hover:!text-white/60"),v=(0,f.F)("text-[#F7F8F8]/60 m-0"),L=(0,f.F)("flex flex-col gap-3"),M=(0,f.F)("text-[#F7F8F8]/60 text-sm"),A=(0,f.F)("flex flex-row gap-6 xxs:gap-8"),k=(0,f.F)("min-w-30 xxs:min-w-40 flex flex-col md:gap-1"),N=()=>(0,s.jsxs)("div",{className:w(),children:[(0,s.jsxs)("div",{className:b(),children:[(0,s.jsx)("div",{className:y(),children:(0,s.jsxs)(r.A,{to:"/genai",children:[(0,s.jsx)("h3",{className:j(),children:"LLMs & Agents"}),(0,s.jsx)("p",{className:v(),children:"The leading open source AI engineering platform"})]})}),(0,s.jsxs)("div",{className:L(),children:[(0,s.jsx)("span",{className:M(),children:"Features"}),(0,s.jsxs)("div",{className:A(),children:[(0,s.jsxs)("div",{className:k(),children:[(0,s.jsx)(x,{href:"/genai/observability",label:"Observability"}),(0,s.jsx)(x,{href:"/genai/evaluations",label:"Evaluations"})]}),(0,s.jsxs)("div",{className:k(),children:[(0,s.jsx)(x,{href:"/genai/prompt-registry",label:"Prompt Registry"}),(0,s.jsx)(x,{href:"/genai/ai-gateway",label:"AI Gateway"})]})]})]})]}),(0,s.jsxs)("div",{className:b(),children:[(0,s.jsx)("div",{className:y(),children:(0,s.jsxs)(r.A,{to:"/classical-ml",children:[(0,s.jsx)("h3",{className:j(),children:"Model Training"}),(0,s.jsx)("p",{className:v(),children:"Mastering the ML lifecycle"})]})}),(0,s.jsxs)("div",{className:L(),children:[(0,s.jsx)("span",{className:M(),children:"Features"}),(0,s.jsxs)("div",{className:A(),children:[(0,s.jsxs)("div",{className:k(),children:[(0,s.jsx)(x,{href:"/classical-ml/experiment-tracking",label:"Experiment tracking"}),(0,s.jsx)(x,{href:"/classical-ml/model-evaluation",label:"Model evaluation"})]}),(0,s.jsxs)("div",{className:k(),children:[(0,s.jsx)(x,{href:"/classical-ml/models",label:"MLflow models"}),(0,s.jsx)(x,{href:"/classical-ml/model-registry",label:"Model Registry & deployment"})]})]})]})]})]});var I=a(57432);let F=(0,f.F)("flex flex-col md:flex-row md:max-w-2xl mx-auto gap-6 md:gap-8 lg:gap-10 px-1 md:px-4 lg:pl-0 docs-submenu overflow-x-hidden"),S=(0,f.F)("flex flex-col gap-1 md:gap-2 pb-4 flex-1 group"),T=(0,f.F)("text-white transition-colors duration-200 group-hover:!text-white/60"),G=(0,f.F)("text-[#F7F8F8]/60 m-0"),q=()=>(0,s.jsxs)("div",{className:F(),children:[(0,s.jsx)("div",{className:S(),children:(0,s.jsxs)(r.A,{to:I.jT,children:[(0,s.jsx)("h3",{className:T(),children:"LLMs & Agents"}),(0,s.jsx)("p",{className:G(),children:"Debug, evaluate, monitor, and optimize your AI agents and LLM applications, with production-grade tracing, evaluation, prompt management, and much more."})]})}),(0,s.jsx)("div",{className:S(),children:(0,s.jsxs)(r.A,{to:I.cf,children:[(0,s.jsx)("h3",{className:T(),children:"Model Training"}),(0,s.jsx)("p",{className:G(),children:"Manage the full machine learning and deep learning model lifecycle, with experiment tracking, hyperparameter tuning, and beyond."})]})})]}),D=(0,f.F)("flex flex-col md:flex-row md:max-w-2xl mx-auto gap-6 md:gap-8 lg:gap-10 px-1 md:px-4 lg:pl-0 overflow-x-hidden"),C=(0,f.F)("flex flex-col gap-1 md:gap-2 pb-4 flex-1 group"),O=(0,f.F)("text-white transition-colors duration-200 group-hover:!text-white/60"),z=(0,f.F)("text-[#F7F8F8]/60 m-0"),P=()=>(0,s.jsxs)("div",{className:D(),children:[(0,s.jsx)("div",{className:C(),children:(0,s.jsxs)(r.A,{to:"/cookbook",children:[(0,s.jsx)("h3",{className:O(),children:"Cookbook"}),(0,s.jsx)("p",{className:z(),children:"Hands-on guides and code examples for building Agents and LLM applications with MLflow."})]})}),(0,s.jsx)("div",{className:C(),children:(0,s.jsxs)(r.A,{to:"/ambassadors",children:[(0,s.jsx)("h3",{className:O(),children:"Ambassador Program"}),(0,s.jsx)("p",{className:z(),children:"Join the MLflow community as an ambassador and help shape the future of ML tooling."})]})})]});var $=a(13497);let W=()=>{let e=(0,m.S)();return(0,s.jsxs)("a",{href:"https://github.com/mlflow/mlflow",target:"_blank",rel:"noreferrer noopener",className:"hidden md:flex items-center gap-1.5 rounded-xl bg-white/10 border border-white/20 px-4 py-2 text-[15px] text-white hover:bg-white/15 hover:border-white/30 transition-all",children:[(0,s.jsx)("svg",{viewBox:"0 0 48 48",fill:"none",className:"w-4 h-4",children:(0,s.jsx)("path",{d:"M24 3.9C35.05 3.9 44 12.85 44 23.9c0 4.19-1.315 8.275-3.759 11.68-2.444 3.404-5.894 5.955-9.864 7.296-.996.2-1.371-.425-1.371-.95 0-.675.025-2.825.025-5.5 0-1.875-.625-3.075-1.35-3.7 4.45-.5 9.125-2.2 9.125-9.875 0-2.2-.775-3.975-2.05-5.375.2-.5.9-2.55-.2-5.3 0 0-1.675-.55-5.5 2.05-1.6-.45-3.3-.675-5-.675s-3.7.225-5.3.675c-3.825-2.575-5.5-2.05-5.5-2.05-1.1 2.75-.4 4.8-.2 5.3-1.275 1.4-2.05 3.2-2.05 5.375 0 7.65 4.65 9.4 9.1 9.9-.575.5-1.1 1.375-1.275 2.675-1.15.525-4.025 1.375-5.825-1.65-.375-.6-1.5-2.075-3.075-2.05-1.675.025-.675.95.025 1.325.85.475 1.825 2.25 2.05 2.825.4 1.125 1.7 3.275 6.725 2.35 0 1.675.025 3.25.025 3.725 0 .525-.375 1.125-1.375.95-3.983-1.326-7.447-3.872-9.902-7.278C5.318 32.192 3.998 28.1 4 23.901 4 12.851 12.95 3.9 24 3.9Z",fill:"currentColor"})}
1),(0,s.jsx)(u.A,{className:"w-3 h-3",fill:"currentColor"}),e&&(0,s.jsx)("span",{className:"font-medium",children:e})]})},E=(0,f.F)("fixed w-full z-20 top-0 start-0 bg-black/20 border-b border-[#F7F8F8]/8 backdrop-blur-[20px] overflow-y-auto",{variants:{isOpen:{true:"h-dvh",false:""}}}),_=()=>{let[e,t]=(0,n.useState)(!1),[a,i]=(0,n.useState)(!1),[d,m]=(0,n.useState)(!1),[u,f]=(0,n.useState)(!1),[w,b]=(0,n.useState)(!1),[y,j]=(0,n.useState)(!1),[v,L]=(0,n.useState)(!1),M=(0,o.zy)(),A=(0,l.Ay)("/classical-ml"),k=(0,l.Ay)("/genai"),F=(0,p.GO)(M.pathname,A,k);return(0,n.useLayoutEffect)(()=>{let e=()=>{window.innerWidth>=640&&t(!1)};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),(0,n.useEffect)(()=>{e?document.body.classList.add("noScroll"):(document.body.classList.remove("noScroll"),m(!1),b(!1),L(!1))},[e]),(0,s.jsxs)("nav",{className:E({isOpen:e}),children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center mx-auto px-6 lg:px-20 py-2 max-w-container",children:[(0,s.jsxs)("div",{className:"md:contents flex flex-row justify-between w-full sticky top-[8px]",children:[(0,s.jsx)(r.A,{href:"/",className:"flex items-center space-x-3 rtl:space-x-reverse grow basis-0","aria-label":"MLflow Home",children:(0,s.jsx)(c.A,{className:"h-[36px]","aria-hidden":"true"})}),(0,s.jsxs)("div",{className:"flex flex-row items-center gap-3 md:order-2 md:gap-4 rtl:space-x-reverse grow justify-end basis-0",children:[(0,s.jsx)(W,{}),(0,s.jsx)(r.A,{href:F,className:"hidden md:block",children:(0,s.jsx)(g.$,{variant:"outline",size:"small",children:"Get Started"})}),(0,s.jsx)(r.A,{href:I.MG,className:"hidden md:block",onClick:$.b,children:(0,s.jsx)(g.$,{variant:"primary",size:"small",children:"Try Demo"})}),(0,s.jsxs)("button",{"data-collapse-toggle":"navbar-sticky",type:"button",className:"inline-flex items-center p-2 w-10 h-10 justify-center text-sm text-white md:hidden focus:outline-none cursor-pointer",onClick:()=>t(!e),children:[(0,s.jsx)("span",{className:"sr-only",children:"Open main menu"}),(0,s.jsx)("svg",{className:"w-5 h-5","aria-hidden":"true",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 17 14",children:(0,s.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M1 1h15M1 7h15M1 13h15"})})]})]})]}),(0,s.jsx)("div",{className:(0,p.cn)("items-center justify-between w-full md:flex md:w-auto md:order-1 mt-4 md:mt-0",e?"flex":"hidden md:flex"),children:(0,s.jsxs)("ul",{className:"flex flex-col font-medium md:flex-row gap-y-6 gap-x-4 lg:gap-x-10 w-full md:w-auto",children:[(0,s.jsxs)("li",{className:"w-full md:w-auto md:hidden",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>{let e=!d;m(e),e&&(b(!1),L(!1))},"aria-expanded":d,"aria-controls":"mobile-components-submenu",className:"flex items-center justify-between gap-2 py-2 text-white text-lg w-full cursor-pointer transition-colors duration-200 hover:text-white/60",children:["Components",(0,s.jsx)(h,{className:(0,p.cn)("w-6 h-6 transition-transform duration-300",d&&"rotate-180")})]}),(0,s.jsx)("div",{id:"mobile-components-submenu",className:(0,p.cn)("transition-all duration-300 ease-in-out overflow-hidden",d?"max-h-[600px] opacity-100":"max-h-0 opacity-0"),children:(0,s.jsx)(N,{})})]}),(0,s.jsx)("li",{className:"w-full md:w-auto hidden md:block",onMouseEnter:()=>{i(!0),f(!1),j(!1)},onClick:()=>{i(!a)},children:(0,s.jsx)(x,{label:"Components",hasDropdown:!0})}),(0,s.jsx)("li",{className:"w-full md:w-auto",children:(0,s.jsx)(x,{href:"/releases",label:"Releases"})}),(0,s.jsx)("li",{className:"w-full md:w-auto",children:(0,s.jsx)(x,{href:"/blog",label:"Blog"})}),(0,s.jsxs)("li",{className:"w-full md:w-auto md:hidden",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>{let e=!w;b(e),e&&(m(!1),L(!1))},"aria-expanded":w,"aria-controls":"mobile-docs-submenu",className:"flex items-center justify-between gap-2 py-2 text-white text-lg w-full cursor-pointer transition-colors duration-200 hover:text-white/60",children:["Docs",(0,s.jsx)(h,{className:(0,p.cn)("w-6 h-6 transition-transform duration-300",w&&"rotate-180")}
1)]}),(0,s.jsx)("div",{id:"mobile-docs-submenu",className:(0,p.cn)("transition-all duration-300 ease-in-out overflow-hidden",w?"max-h-[300px] opacity-100":"max-h-0 opacity-0"),children:(0,s.jsx)(q,{})})]}),(0,s.jsx)("li",{className:"w-full md:w-auto hidden md:block",onMouseEnter:()=>{f(!0),i(!1),j(!1)},onClick:()=>{f(!u)},children:(0,s.jsx)(x,{label:"Docs",hasDropdown:!0})}),(0,s.jsxs)("li",{className:"w-full md:w-auto md:hidden",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>{let e=!v;L(e),e&&(m(!1),b(!1))},"aria-expanded":v,"aria-controls":"mobile-resources-submenu",className:"flex items-center justify-between gap-2 py-2 text-white text-lg w-full cursor-pointer transition-colors duration-200 hover:text-white/60",children:["Resources",(0,s.jsx)(h,{className:(0,p.cn)("w-6 h-6 transition-transform duration-300",v&&"rotate-180")})]}),(0,s.jsx)("div",{id:"mobile-resources-submenu",className:(0,p.cn)("transition-all duration-300 ease-in-out overflow-hidden",v?"max-h-[300px] opacity-100":"max-h-0 opacity-0"),children:(0,s.jsx)(P,{})})]}),(0,s.jsx)("li",{className:"w-full md:w-auto hidden md:block",onMouseEnter:()=>{j(!0),i(!1),f(!1)},onClick:()=>{j(!y)},children:(0,s.jsx)(x,{label:"Resources",hasDropdown:!0})}),(0,s.jsxs)("li",{className:"w-full md:w-auto md:hidden flex flex-col gap-2",children:[(0,s.jsx)(r.A,{href:F,children:(0,s.jsx)(g.$,{variant:"outline",size:"small",width:"full",children:"Get Started"})}),(0,s.jsx)(r.A,{href:I.MG,onClick:$.b,children:(0,s.jsx)(g.$,{variant:"primary",size:"small",width:"full",children:"Try Demo"})})]})]})})]}),(0,s.jsx)("div",{className:(0,p.cn)("flex-col w-full py-6",a?"flex":"hidden"),onMouseLeave:()=>{i(!1)},children:(0,s.jsx)(N,{})}),(0,s.jsx)("div",{className:(0,p.cn)("flex-col w-full py-6",u?"flex":"hidden"),onMouseLeave:()=>{f(!1)},children:(0,s.jsx)(q,{})}),(0,s.jsx)("div",{className:(0,p.cn)("flex-col w-full py-6",y?"flex":"hidden"),onMouseLeave:()=>{j(!1)},children:(0,s.jsx)(P,{})})]})}},57432(e,t,a){a.d(t,{$i:()=>l,MG:()=>s,OU:()=>i,Q5:()=>o,cf:()=>r,jT:()=>n});let i="https://mlflow.org/docs/latest/",s="https://demo.mlflow.org/#/experiments/1",n="https://mlflow.org/docs/latest/genai/",r="https://mlflow.org/docs/latest/ml/",o="https://signup.databricks.com/?destination_url=/ml/experiments-signup?source=TRY_MLFLOW&dbx_source=TRY_MLFLOW&signup_experience_step=EXPRESS&provider=MLFLOW&utm_source=mlflow_org",l="https://docs.databricks.com/aws/en/mlflow/mlflow-3-install"},98749(e,t,a){a.d(t,{S:()=>n});var i=a(96540);let s="mlflow_github_stars";function n(){let[e,t]=(0,i.useState)(null);return(0,i.useEffect)(()=>{let e=localStorage.getItem(s);if(e){let{value:a,timestamp:i}=JSON.parse(e);if(Date.now()-i<36e5)return void t(a)}fetch("https://api.github.com/repos/mlflow/mlflow").then(e=>e.json()).then(e=>{if(e.stargazers_count){var a;let i=(a=e.stargazers_count)>=1e3?`${Math.floor(a/1e3)}K`:String(a);t(i),localStorage.setItem(s,JSON.stringify({value:i,timestamp:Date.now()}))}}).catch(()=>{})},[]),e}},72956(e,t,a){a.r(t),a.d(t,{default:()=>N});var i=a(74848),s=a(96540),n=a(53572),r=a(95310),o=a(71765),l=a(11651),c=a(24937),d=a(57432),h=a(77114),p=a(50321);let m=a.p+"assets/images/mlflow-logo-ad373f8dc36625e1892ffecd07f29cb9.png",u=a.p+"assets/images/litellm-logo-cc6f4dc055fc13c17bf0349b1e6d2b8d.png",g=a.p+"assets/images/litellm-ui-d44bfb3afe6a3225a89a10aa1f017dd0.png",x=a.p+"assets/images/mlflow-eval-ui-9ddaeb0c9005b25f510d1cf854891b31.png",f=a.p+"assets/images/mlflow-gateway-ui-ffe0e81c0857cf0d9eae44c47fa55518.png",w="MLflow AI Gateway: The Open-Source LiteLLM Alternative | MLflow vs LiteLLM",b="Compare MLflow and LiteLLM for AI Gateway, LLM tracing, and evaluation. Learn why teams choose MLflow for enterprise-grade security, complete platform capabilities, and Linux Foundation governance.",y=[{label:"Gateway Tracing",mlflow:`# Enable "Usage Tracking" on the endpoint 2# in the MLflow AI Gateway UI. Done. 3# 4# Every gateway request is automatically 5# traced with latency, token usage, and 6# errors (cost too, once model pricing is 7# set). No code changes. 8from openai import OpenAI 9 10client = OpenAI(base_url="http://localhost:5000/gateway/v1") 11 12# Invoke the client as usual 13`,litellm:`import litellm 14 15# Observability requires configuring an
16# external callback (e.g. Datadog, Langfuse). 17 18litellm.success_callback = ["datadog"] 19litellm.failure_callback = ["datadog"] 20 21# Also requires: 22# - Datadog agent running 23# - DD_API_KEY configured 24# - Separate dashboard setup`},{label:"Agent Tracing",mlflow:`import mlflow 25 26mlflow.langgraph.autolog() 27 28# Every node, edge, and tool call 29# is traced automatically, from agent 30# orchestration down to LLM requests. 31# 32# Agent traces and gateway traces are 33# linked automatically via distributed 34# tracing - no extra code needed.`,litellm:`# LiteLLM focuses on LLM API call 35# proxying. Agent-level tracing (tool 36# calls, multi-step reasoning) requires 37# a separate tool. 38# 39# Client-side and proxy-side traces are 40# independent -- connecting them requires 41# manual correlation across systems.`}],j=[["Feature","MLflow","LiteLLM"],["Multi-provider Routing","\u2705","\u2705"],["OpenAI-compatible API","\u2705","\u2705"],["Rate Limiting","\u2705","\u2705"],["Cost Tracking","\u2705","\u2705"],["Fallbacks & Load Balancing","\u2705","\u2705"],["Passthrough / Native Provider APIs","\u2705","\u2705"],["Guardrails","\u2705","Enterprise only"],["Observability","\u2705",(0,i.jsxs)(i.Fragment,{children:["\u274C",(0,i.jsx)("br",{})," (external tools required)"]})]];function v({rows:e}){let[t,...a]=e;return(0,i.jsx)("div",{className:"comparison-table-wrap",children:(0,i.jsxs)("table",{className:"comparison-table",children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:t.map((e,t)=>(0,i.jsx)("th",{children:e},t))})}),(0,i.jsx)("tbody",{children:a.map((e,t)=>(0,i.jsx)("tr",{children:e.map((e,t)=>(0,i.jsx)("td",{className:0===t?"feature-cell":"",children:e},t))},t))})]})})}function L(){return(0,i.jsxs)("span",{className:"code-logo-inline",children:[(0,i.jsx)("img",{src:m,alt:"MLflow",className:"code-logo-icon"}),"MLflow"]})}function M(){return(0,i.jsxs)("span",{className:"code-logo-inline",children:[(0,i.jsx)("img",{src:u,alt:"LiteLLM",className:"code-logo-icon"}),"LiteLLM"]})}function A({code:e,label:t}){return(0,i.jsxs)("div",{className:"code-side",children:[(0,i.jsxs)("div",{className:"code-side-header",children:[(0,i.jsx)("span",{className:"code-side-label",children:"MLflow"===t?(0,i.jsx)(L,{}):(0,i.jsx)(M,{})}),(0,i.jsx)(h.i,{text:e})]}),(0,i.jsx)(o.f4,{theme:p.AS,code:e,language:"python",children:({tokens:e,getLineProps:t,getTokenProps:a})=>(0,i.jsx)("pre",{className:"code-tabs-pre",style:{background:p.o},children:e.map((e,s)=>(0,i.jsx)("div",{...t({line:e}),children:e.map((e,t)=>(0,i.jsx)("span",{...a({token:e})},t))},s))})})]})}function k({tabs:e}
41){let[t,a]=(0,s.useState)(0);return(0,i.jsxs)("div",{className:"code-tabs",children:[(0,i.jsx)("div",{className:"code-tabs-header",children:e.map((e,s)=>(0,i.jsx)("button",{className:`code-tab ${s===t?"active":""}`,onClick:()=>a(s),children:e.label},s))}),(0,i.jsxs)("div",{className:"code-side-by-side",children:[(0,i.jsx)(A,{code:e[t].mlflow,label:"MLflow"}),(0,i.jsx)(A,{code:e[t].litellm,label:"LiteLLM"})]})]})}function N(){let[e,t]=(0,s.useState)(null),a=[{question:"What is the best open-source LiteLLM alternative?",answer:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.A,{to:"/",children:"MLflow AI Gateway"})," is a leading open-source alternative to LiteLLM. It provides the same OpenAI-compatible multi-provider routing, rate limiting, cost tracking, and fallbacks, plus native tracing and evaluation, under the Apache 2.0 license and Linux Foundation governance."]}),answerText:"MLflow AI Gateway is a leading open-source alternative to LiteLLM. It provides the same OpenAI-compatible multi-provider routing, rate limiting, cost tracking, and fallbacks, plus native tracing and evaluation, under the Apache 2.0 license and Linux Foundation governance."},{question:"Is MLflow AI Gateway a good alternative to LiteLLM?",answer:(0,i.jsx)(i.Fragment,{children:"Yes. MLflow AI Gateway matches LiteLLM's core gateway features and adds built-in observability, evaluation, and prompt management in one platform, with enterprise-grade security and roughly half the latency overhead in our benchmark."}),answerText:"Yes. MLflow AI Gateway matches LiteLLM's core gateway features and adds built-in observability, evaluation, and prompt management in one platform, with enterprise-grade security and roughly half the latency overhead in our benchmark."},{question:"Is MLflow AI Gateway faster than LiteLLM?",answer:(0,i.jsx)(i.Fragment,{children:"Yes. In our benchmark (50 ms simulated provider delay, 4 workers, 50 concurrent users), MLflow AI Gateway added about half the latency overhead of LiteLLM (28.6 ms vs 56.7 ms at P50) and delivered 67% higher throughput (598 vs 358 requests per second)."}),answerText:"Yes. In our benchmark (50 ms simulated provider delay, 4 workers, 50 concurrent users), MLflow AI Gateway added about half the latency overhead of LiteLLM (28.6 ms vs 56.7 ms at P50) and delivered 67% higher throughput (598 vs 358 requests per second)."},{question:"Does MLflow AI Gateway support LLM tracing and observability?",answer:(0,i.jsxs)(i.Fragment,{children:["Yes. MLflow AI Gateway captures every request as a"," ",(0,i.jsx)(r.A,{to:`${d.jT}governance/ai-gateway/usage-tracking/`,children:"trace"})," ","automatically when usage tracking is enabled \u2014 latency, token usage, and errors \u2014 with no code changes (cost too, once model pricing is configured). It also supports"," ",(0,i.jsx)(r.A,{to:`${d.jT}tracing/app-instrumentation/distributed-tracing/`,children:"W3C distributed tracing"})," ","to link client-side agent traces to gateway traces. LiteLLM has no built-in tracing and requires an external tool such as Datadog or Langfuse."]}),answerText:"Yes. MLflow AI Gateway captures every request as a trace automatically when usage tracking is enabled - latency, token usage, and errors - with no code changes (cost too, once model pricing is configured). It also supports W3C distributed tracing to link client-side agent traces to gateway traces. LiteLLM has no built-in tracing and requires an external tool such as Datadog or Langfuse."},{question:"Is MLflow AI Gateway open source and free to self-host?",answer:(0,i.jsx)(i.Fragment,{children:"Yes. MLflow is open source under the Apache 2.0 license and governed by the Linux Foundation, with the same core MLflow functionality whether you self-host or use a managed offering. You can self-host the AI Gateway at no cost."}),answerText:"Yes. MLflow is open source under the Apache 2.0 license and governed by the Linux Foundation, with the same core MLflow functionality whether you self-host or use a managed offering. You can self-host the AI Gateway at no cost."},{question:"How many LLM providers does MLflow AI Gateway support?",answer:(0,i.jsxs)(i.Fragment,{children:["MLflow AI Gateway supports access to"," ",(0,i.jsx)(r.A,{to:"https://mlflow.org/genai/ai-gateway",children:"over 50 model providers"}),", including OpenAI, Anthropic, Google, Azure, and AWS Bedrock, through a single OpenAI-compatible API."]}),answerText:"MLflow AI Gateway supports access to over 50 model providers, including OpenAI, Anthropic, Google, Azure, and AWS Bedrock, through a single OpenAI-compatible API."},{question:"Can MLflow AI Gateway replace the LiteLLM proxy?",answer:(0,i.jsx)(i.Fragment,{children:"For most teams, yes. MLflow AI Gateway offers OpenAI-compatible multi-provider routing, rate limiting, cost tracking, and fallbacks like LiteLLM. LiteLLM may still fit teams that need its 100+ provider coverage or long-tail providers only it supports."}),answerText:"For most teams, yes. MLflow AI Gateway offers OpenAI-compatible multi-provider routing, rate limiting, cost tracking, and fallbacks like LiteLLM. LiteLLM may still fit teams that need its 100+ provider coverage or long-tail providers only it supports."},{question:"Which is more secure, MLflow or LiteLLM?",answer:(0,i.jsx)(i.Fragment,{children:"MLflow benefits from a dedicated security team at Databricks, nearly a decade of enterprise hardening, and Linux Foundation governance. In March 2026, LiteLLM experienced a supply-chain incident in
41which compromised packages were briefly published to PyPI. Both are open source, so evaluate each project's security practices and governance for your needs."}),answerText:"MLflow benefits from a dedicated security team at Databricks, nearly a decade of enterprise hardening, and Linux Foundation governance. In March 2026, LiteLLM experienced a supply-chain incident in which compromised packages were briefly published to PyPI. Both are open source, so evaluate each project's security practices and governance for your needs."}],o={"@context":"https://schema.org","@type":"FAQPage",mainEntity:a.map(e=>({"@type":"Question",name:e.question,acceptedAnswer:{"@type":"Answer",text:e.answerText}}))};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.A,{children:[(0,i.jsx)("title",{children:w}),(0,i.jsx)("meta",{name:"description",content:b}),(0,i.jsx)("meta",{property:"og:title",content:w}),(0,i.jsx)("meta",{property:"og:description",content:b}),(0,i.jsx)("meta",{property:"og:type",content:"article"}),(0,i.jsx)("link",{rel:"canonical",href:"https://mlflow.org/litellm-alternative"}),(0,i.jsx)("script",{type:"application/ld+json",children:JSON.stringify(o)}),(0,i.jsx)("style",{children:` 42 @import url('https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap'); 43 44 header, nav { 45 background: #000000 !important; 46 } 47 body { 48 background: #ffffff; 49 margin: 0; 50 padding: 0; 51 font-family: 'DM Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 52 } 53 .article-page { 54 background: #ffffff; 55 min-height: 100vh; 56 } 57 .article-container { 58 max-width: 900px; 59 margin: 0 auto; 60 padding: 60px 24px 100px; 61 } 62 .article-container h1 { 63 font-family: 'DM Sans', sans-serif; 64 font-size: 3rem !important; 65 font-weight: 700 !important; 66 color: #1a1a1a !important; 67 margin: 48px 0 16px 0 !important; 68 line-height: 1.0 !important; 69 letter-spacing: -0.03em !important; 70 } 71 .article-container .subtitle { 72 font-family: 'DM Sans', sans-serif; 73 font-size: 18px; 74 color: #505050; 75 line-height: 1.6; 76 margin: 0 0 48px 0; 77 } 78 .article-container h2 { 79 font-family: 'DM Sans', sans-serif; 80 font-size: 2rem; 81 font-weight: 700; 82 color: #1a1a1a; 83 margin: 64px 0 24px 0; 84 line-height: 1.2; 85 letter-spacing: -0.01em; 86 } 87 .article-container h3 { 88 font-family: 'DM Sans', sans-serif; 89 font-size: 1.5rem; 90 font-weight: 600; 91 color: #1a1a1a; 92 margin: 32px 0 16px 0; 93 line-height: 1.2; 94 } 95 .article-container p { 96 font-family: 'DM Sans', sans-serif; 97 font-size: 16px; 98 color: #3d3d3d; 99 line-height: 1.7; 100 margin: 0 0 24px 0; 101 } 102 .article-container strong { 103 font-weight: 600; 104 color: #1a1a1a; 105 } 106 .article-container a { 107 color: #0194e2 !important; 108 text-decoration: none; 109 transition: all 0.2s ease; 110 } 111 .article-container a:hover { 112 color: #0072b0 !important; 113 text-decoration: underline; 114 } 115 .article-container ul { 116 list-style-type: disc; 117 margin: 12px 0 24px 0; 118 padding-left: 24px !important; 119 list-style-position: outside; 120 } 121 .article-container li { 122 font-family: 'DM Sans', sans-serif; 123 font-size: 16px; 124 color: #3d3d3d; 125 line-height: 1.7; 126 margin-bottom: 8px; 127 padding-left: 4px; 128 } 129 130 /* Screenshot images */ 131 .screenshot-wrap { 132 margin: 24px 0 32px 0; 133 border-radius: 8px; 134 overflow: hidden; 135 border: 1px solid #e5e7eb; 136 box-shadow: 0 0 0 1px rgba(50, 50, 93, 0.05), 0 4px 20px rgba(50, 50, 93, 0.1); 137 } 138 .screenshot-wrap img { 139 display: block; 140 width: 100%; 141 height: auto; 142 } 143 144 /* TL;DR cards */ 145 .tldr-grid { 146 display: grid; 147 grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); 148 gap: 24px; 149 margin: 24px 0 56px 0; 150 } 151 .tldr-card { 152 background: #ffffff; 153 border: 1px solid #e5e7eb; 154 border-radius: 4px; 155 padding: 32px; 156 box-shadow: 0 0 0 1px rgba(50, 50, 93, 0.05), 0 0 14px 5px rgba(50, 50, 93, 0.08), 0 0 10px 3px rgba(0, 0, 0, 0.05); 157 } 158 .tldr-card.highlight { 159 border-color: #0194e2; 160 } 161 .tldr-card h3 { 162 margin-top: 0 !important; 163 margin-bottom: 16px !important; 164 font-size: 1.2rem; 165 display: flex; 166 align-items: center; 167 gap: 10px; 168 } 169 .tldr-logo { 170 width: 28px; 171 height: 28px; 172 object-fit: contain; 173 flex-shrink: 0; 174 } 175 .article-container .tldr-card ul { 176 padding-left: 28px !important; 177 } 178 .tldr-card li { 179 font-size: 14px; 180 margin-bottom: 6px; 181 } 182 183 /* Comparison tables */ 184 .comparison-table-wrap { 185 width: 100%; 186 overflow-x: auto; 187 margin: 16px 0 40px 0; 188 } 189 .comparison-table { 190 width: 100%; 191 border-collapse: collapse; 192 font-family: 'DM Sans', sans-serif; 193 font-size: 14px; 194 } 195 .comparison-table thead th { 196 text-align: center; 197 padding: 12px 16px; 198 border-bottom: 2px solid #e5e7eb; 199 color: #1a1a1a; 200 font-weight: 600; 201 background: #f9fafb; 202 } 203 .comparison-table thead th:first-child { 204 text-align: left; 205 } 206 .comparison-table tbody td { 207 padding: 12px 16px;
208 border-bottom: 1px solid #f0f0f0; 209 color: #505050; 210 vertical-align: top; 211 text-align: center; 212 } 213 .comparison-table tbody td.feature-cell { 214 color: #1a1a1a; 215 font-weight: 500; 216 text-align: left; 217 } 218 .comparison-table tbody td.diff-cell { 219 color: #16a34a; 220 font-weight: 600; 221 } 222 .comparison-table tbody tr:hover { 223 background: #f9fafb; 224 } 225 226 /* Code tabs */ 227 .code-tabs { 228 margin: 24px 0 40px 0; 229 border-radius: 8px; 230 overflow: hidden; 231 border: none; 232 background: #111318; 233 } 234 .code-tabs-header { 235 display: flex; 236 align-items: center; 237 gap: 0; 238 background: #1e1e2e; 239 border-bottom: 1px solid rgba(255,255,255,0.1); 240 padding: 0 12px; 241 } 242 .code-tab { 243 font-family: 'DM Sans', sans-serif; 244 font-size: 13px; 245 font-weight: 500; 246 padding: 10px 16px; 247 background: transparent; 248 border: none; 249 color: rgba(255,255,255,0.5); 250 cursor: pointer; 251 border-bottom: 2px solid transparent; 252 transition: all 0.2s ease; 253 } 254 .code-tab:hover { 255 color: rgba(255,255,255,0.8); 256 } 257 .code-tab.active { 258 color: #ffffff; 259 border-bottom-color: #0194e2; 260 } 261 .code-side-by-side { 262 display: grid; 263 grid-template-columns: 1fr 1fr; 264 } 265 .code-side { 266 display: flex; 267 flex-direction: column; 268 min-width: 0; 269 } 270 .code-side:first-child { 271 border-right: 1px solid rgba(255,255,255,0.1); 272 } 273 .code-side-header { 274 display: flex; 275 align-items: center; 276 justify-content: space-between; 277 padding: 8px 16px; 278 background: #111318; 279 border-bottom: 1px solid rgba(255,255,255,0.08); 280 } 281 .code-side-label { 282 display: flex; 283 align-items: center; 284 } 285 .code-side-label img { 286 display: block; 287 } 288 .code-logo-inline { 289 display: flex; 290 align-items: center; 291 gap: 6px; 292 font-family: 'DM Sans', sans-serif; 293 font-size: 13px; 294 font-weight: 600; 295 color: #ffffff; 296 } 297 .code-logo-icon { 298 width: 16px; 299 height: 16px; 300 object-fit: contain; 301 } 302 .code-tabs-pre { 303 margin: 0 !important; 304 padding: 16px 16px !important; 305 font-family: 'DM Mono', monospace !important; 306 font-size: 12px !important; 307 line-height: 1.6 !important; 308 overflow-x: auto; 309 flex: 1; 310 } 311 @media (max-width: 768px) { 312 .code-side-by-side { 313 grid-template-columns: 1fr; 314 } 315 .code-side:first-child { 316 border-right: none; 317 border-bottom: 1px solid rgba(255,255,255,0.1); 318 } 319 } 320 321 /* Eval checklist */ 322 .eval-checklist { 323 width: 100%; 324 border-collapse: collapse; 325 font-family: 'DM Sans', sans-serif; 326 font-size: 15px; 327 margin: 24px 0 40px 0; 328 } 329 .eval-checklist thead th { 330 text-align: left; 331 padding: 12px 16px; 332 border-bottom: 2px solid #e5e7eb; 333 color: #1a1a1a; 334 font-weight: 600; 335 background: #f9fafb; 336 } 337 .eval-checklist thead th:first-child { 338 width: 40%; 339 } 340 .eval-checklist thead th:not(:first-child) { 341 text-align: center; 342 width: 30%; 343 } 344 .eval-checklist tbody td { 345 padding: 12px 16px;
346 border-bottom: 1px solid #f0f0f0; 347 color: #3d3d3d; 348 } 349 .eval-checklist tbody td:not(:first-child) { 350 text-align: center; 351 font-size: 18px; 352 } 353 .eval-checklist tbody tr:hover { 354 background: #f9fafb; 355 } 356 357 /* FAQ */ 358 .faq-list { 359 margin: 32px 0 40px; 360 } 361 .faq-item { 362 border-bottom: 1px solid #e5e7eb; 363 } 364 .faq-question { 365 width: 100%; 366 display: flex; 367 justify-content: space-between; 368 align-items: center; 369 padding: 20px 0; 370 background: none; 371 border: none; 372 font-size: 18px; 373 font-weight: 600; 374 color: #1a1a1a; 375 cursor: pointer; 376 text-align: left; 377 } 378 .faq-chevron { 379 transition: transform 0.2s ease; 380 color: #6b7280; 381 font-size: 16px; 382 margin-left: 24px; 383 } 384 .faq-chevron.open { 385 transform: rotate(180deg); 386 } 387 .article-container .faq-answer { 388 padding-bottom: 20px; 389 color: #3d3d3d; 390 line-height: 1.7; 391 margin: 0; 392 } 393 .faq-answer a { 394 font-weight: 600; 395 color: #0194e2 !important; 396 text-decoration: none; 397 } 398 .faq-answer a:hover { 399 text-decoration: underline; 400 } 401 402 /* Sidebar TOC */ 403 .article-sidebar { 404 position: fixed; 405 top: 100px; 406 left: calc(50% + 900px / 2 + 48px); 407 width: 280px; 408 max-height: calc(100vh - 120px); 409 overflow-y: auto; 410 } 411 .article-sidebar .toc-title { 412 font-family: 'DM Sans', sans-serif; 413 font-size: 13px; 414 font-weight: 600; 415 text-transform: uppercase; 416 letter-spacing: 0.08em; 417 color: #9ca3af; 418 margin: 0 0 12px 0; 419 } 420 .article-sidebar ul { 421 margin: 0; 422 padding: 0; 423 list-style: none; 424 border-left: 1px solid #e5e7eb; 425 } 426 .article-sidebar li { 427 margin: 0; 428 padding: 0; 429 } 430 .article-sidebar a { 431 font-family: 'DM Sans', sans-serif; 432 display: block; 433 padding: 8px 0 8px 16px; 434 font-size: 16px; 435 color: #0194e2 !important; 436 text-decoration: none !important; 437 transition: all 0.15s ease; 438 line-height: 1.4; 439 } 440 .article-sidebar a:hover { 441 color: #0072b0 !important; 442 } 443 .article-sidebar .toc-divider { 444 border: none; 445 border-top: 1px solid #e5e7eb; 446 margin: 12px 0 12px 0; 447 } 448 @media (max-width: 1400px) { 449 .article-sidebar { 450 display: none; 451 } 452 } 453 454 @media (max-width: 768px) { 455 .article-container { 456 padding: 40px 20px 80px; 457 } 458 .article-container h1 { 459 font-size: 36px !important; 460 margin-bottom: 12px !important; 461 } 462 .article-container h2 { 463 font-size: 28px; 464 margin: 40px 0 20px 0; 465 } 466 .tldr-grid { 467 grid-template-columns: 1fr; 468 } 469 } 470 `})]}),(0,i.jsxs)("div",{className:"article-page",children:[(0,i.jsx)(l.Y,{}),(0,i.jsxs)("div",{className:"article-container",children:[(0,i.jsx)("h1",{children:"MLflow AI Gateway: The Open-Source LiteLLM Alternative"}),(0,i.jsxs)("p",{className:"subtitle",children:[(0,i.jsx)("strong",{children:"Short answer: MLflow AI Gateway is a secure, Linux Foundation\u2013governed open-source alternative to LiteLLM that adds native tracing, evaluation, and roughly half the gateway latency overhead."})," ","This article is for teams looking for a secure, enterprise-ready, open-source alternative to LiteLLM. We compare the two across governance, security, performance, tracing, and complete AI platform capabilities to help you decide which is the right fit."]}),(0,i.jsx)("h2",{children:"What is LiteLLM?"}),(0,i.jsx)("div",{className:"screenshot-wrap",children:(0,i.jsx)("img",{src:g,alt:"LiteLLM proxy UI showing virtual key creation and model management"})}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:(0,i.jsx)(r.A,{href:"https://www.litellm.ai/",children:"LiteLLM"})})," ","is an open source AI gateway maintained by BerriAI, a Y Combinator-backed startup. It provides a unified, OpenAI-compatible interface to over 100 LLM providers, with built-in features like cost tracking, rate limiting, and automatic fallbacks. LiteLLM also offers a Python SDK for direct client integration."]}),(0,i.jsx)("h2",{children:"What Is MLflow AI Gateway?"}),(0,i.jsx)("div",{className:"screenshot-wrap",children:(0,i.jsx)("img",{src:f,alt:"MLflow gateway UI"})}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:(0,i.jsx)(r.A,{to:"/",children:"MLflow"})})," ","is an open source AI engineering platform for agents, LLMs, and models that enables team
470s of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data. With over 30 million monthly downloads, thousands of organizations rely on MLflow each day to ship AI to production with confidence."]}),(0,i.jsx)("h2",{id:"quick-comparison","data-toc":"Quick Comparison",children:"MLflow AI Gateway vs LiteLLM at a Glance"}),(0,i.jsxs)("div",{className:"tldr-grid",children:[(0,i.jsxs)("div",{className:"tldr-card highlight",children:[(0,i.jsxs)("h3",{children:[(0,i.jsx)("img",{src:m,alt:"MLflow",className:"tldr-logo"}),"Choose MLflow if you..."]}),(0,i.jsxs)("ul",{children:[(0,i.jsxs)("li",{children:["Need a ",(0,i.jsx)("strong",{children:"secure gateway solution"})," trusted by thousands of enterprises"]}),(0,i.jsxs)("li",{children:["Want ",(0,i.jsx)("strong",{children:"native observability"})," integrated with your gateway"]}),(0,i.jsxs)("li",{children:["Care about performance and want a"," ",(0,i.jsx)("strong",{children:"low-overhead"})," gateway solution"]})]})]}),(0,i.jsxs)("div",{className:"tldr-card",children:[(0,i.jsxs)("h3",{children:[(0,i.jsx)("img",{src:u,alt:"LiteLLM",className:"tldr-logo"}),"Choose LiteLLM if you..."]}),(0,i.jsxs)("ul",{children:[(0,i.jsxs)("li",{children:["Need a ",(0,i.jsx)("strong",{children:"dedicated LLM proxy"})," for model routing"]}),(0,i.jsxs)("li",{children:["Use ",(0,i.jsx)("strong",{children:"long-tail LLM providers"})," that only LiteLLM supports"]}),(0,i.jsxs)("li",{children:["Already using ",(0,i.jsx)("strong",{children:"LiteLLM client"})," and is satisfied with its experience and stability"]})]})]})]}),(0,i.jsx)("h2",{id:"open-source-governance","data-toc":"Open Source",children:"Is MLflow AI Gateway Open Source?"}),(0,i.jsx)("p",{children:(0,i.jsx)("strong",{children:"Yes. MLflow is open source under the Apache 2.0 license and governed by the Linux Foundation, with the same core MLflow functionality whether you self-host or use a managed offering."})}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"LiteLLM"})," is open source under the MIT license, maintained by"," ",(0,i.jsx)("strong",{children:(0,i.jsx)(r.A,{href:"https://www.ycombinator.com/companies/berriai",children:"BerriAI"})}),", a Y Combinator-backed startup. While the core SDK is freely available, enterprise features such as SSO, audit logging, and advanced admin controls are only available for paid customers with enterprise contract. Part of the source code is also under a separate license."]}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"MLflow"})," is open source under Apache 2.0 and is"," ",(0,i.jsxs)("strong",{children:["backed by the"," ",(0,i.jsx)(r.A,{href:"https://www.linuxfoundation.org/press/press-release/the-mlflow-project-joins-linux-foundation",children:"Linux Foundation"})]}),", the premier open source software foundation who also owns Linux, Kubernetes, and Pytorch. MLflow has been powering production AI since 2018 and offers the same core MLflow functionality whether you self-host or use a managed offering. With over 30 million monthly downloads and thousands of enterprise users, MLflow is one of the most widely deployed AI platforms."]}),(0,i.jsx)("h2",{id:"security-reliability","data-toc":"Security & Reliability",children:"Which AI Gateway Is More Secure \u2014 MLflow or LiteLLM?"}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"Both gateways are open source and can be deployed securely, but MLflow brings a dedicated security team at Databricks, nearly a decade of enterprise hardening, and Linux Foundation governance."})," ","For teams deploying AI in production, the security and reliability of the tools in their stack are not optional. When an AI gateway sits between your applications and LLM providers, it becomes a critical piece of infrastructure that handles API keys, model access, and sensitive data."]}),(0,i.jsxs)("p",{children:["In March 2026, ",(0,i.jsx)("strong",{children:"LiteLLM"})," experienced a"," ",(0,i.jsx)(r.A,{href:"https://securitylabs.datadoghq.com/articles/litellm-compromised-pypi-teampcp-supply-chain-campaign/",children:"supply chain incident"})," ","where compromised packages were briefly published to PyPI. BerriAI responded promptly and engaged Mandiant for forensic analysis. While such incidents can affect any open source project, this highlights the importance of evaluating the security practices and governance model of tools in your AI infrastru
470cture."]}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"MLflow"})," benefits from"," ",(0,i.jsx)("strong",{children:"dedicated security team"})," from Databricks and nearly a decade of hardening for enterprise deployments. With thousands of enterprise users worldwide, MLflow has a proven track record of reliability and security at scale. The Linux Foundation governance provides additional assurance that security practices meet enterprise standards, and the large contributor community means more eyes on the code and faster identification of potential issues."]}),(0,i.jsx)("h2",{id:"ai-gateway","data-toc":"AI Gateway",children:"MLflow AI Gateway vs LiteLLM: Gateway Capabilities"}),(0,i.jsx)("p",{children:"Both MLflow and LiteLLM offer AI Gateway capabilities for routing requests to multiple LLM providers, managing costs, and enforcing usage policies. Most major providers (OpenAI, Anthropic, Google, Azure, AWS Bedrock, and more) are supported by both gateways. This is the primary overlap between the two tools."}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"LiteLLM"})," is purpose-built as a"," ",(0,i.jsx)(r.A,{href:"https://docs.litellm.ai/docs/simple_proxy",children:"gateway proxy"}),", offering broad provider support (100+), virtual key management, and an OpenAI-compatible API format that enables applications to switch providers without code changes. It offers rate limiting, cost tracking, and automatic fallbacks. However, LiteLLM operates"," ",(0,i.jsx)("strong",{children:"in isolation from the rest of the AI development stack"}),". To gain observability into gateway traffic, teams must configure external callback handlers. To evaluate model quality or optimize prompts, they need entirely separate tools."]}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"MLflow"})," offers a built-in"," ",(0,i.jsx)(r.A,{to:`${d.jT}governance/ai-gateway/`,children:"AI Gateway"})," ","with similar routing, rate limiting, cost tracking, and fallback capabilities, but with a critical advantage:"," ",(0,i.jsx)("strong",{children:"native integration with tracing, evaluation, and prompt management"}),". When requests flow through MLflow's gateway, they are automatically captured in traces, enabling teams to connect cost and usage data with evaluation results and prompt performance, all in a single platform."]}),(0,i.jsx)(v,{rows:j}),(0,i.jsx)("h2",{id:"performance","data-toc":"Performance",children:"Is MLflow AI Gateway Faster Than LiteLLM?"}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"Yes. In our benchmark, MLflow AI Gateway added roughly half the latency overhead of LiteLLM (28.6 ms vs 56.7 ms at P50) and delivered 67% higher throughput."})," ","For production AI applications, gateway performance directly impacts user experience. Every millisecond of overhead added by the gateway is multiplied across millions of requests."]}),(0,i.jsxs)("p",{children:["We benchmarked both gateways with a 50 ms simulated provider delay (4 workers, 50 concurrent users). The overhead column shows gateway latency after subtracting the simulated delay. The results show that MLflow's AI Gateway adds"," ",(0,i.jsx)("strong",{children:"approximately half the overhead"})," and delivers"," ",(0,i.jsx)("strong",{children:"67% higher throughput"})," compared to LiteLLM."]}),(0,i.jsx)("div",{className:"comparison-table-wrap",children:(0,i.jsxs)("table",{className:"comparison-table",children:[(0,i.jsxs)("thead",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{rowSpan:2,children:"Metric"}),(0,i.jsx)("th",{colSpan:2,children:"MLflow"}),(0,i.jsx)("th",{colSpan:2,children:"LiteLLM"}),(0,i.jsx)("th",{rowSpan:2,children:"Overhead Diff"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"Latency"}),(0,i.jsx)("th",{children:"Overhead"}),(0,i.jsx)("th",{children:"Latency"}),(0,i.jsx)("th",{children:"Overhead"})]})]}),(0,i.jsxs)("tbody",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:"feature-cell",children:"P50"}),(0,i.jsx)("td",{children:"78.6 ms"}),(0,i.jsx)("td",{children:"28.6 ms"}),(0,i.jsx)("td",{children:"106.7 ms"}),(0,i.jsx)("td",{children:"56.7 ms"}),(0,i.jsx)("td",{className:"diff-cell",children:"-50%"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:"feature-cell",children:"P99"}),(0,i.jsx)("td",{children:"184.2 ms"}),(0,i.jsx)("td",{children:"134.2 ms"}),(0,i.jsx)("td",{children:"388.8 ms"}),(0,i.jsx)("td",{children:"338.8 ms"}),(0,i.jsx)("td",{className:"diff-cell",children:"-60%"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:"feature-cell",children:"Throughput"}),(0,i.jsx)("td",{colSpan:2,children:"598 req/s"}),(0,i.jsx)("td",{colSpan:2,children:"358 req/s"}
470),(0,i.jsx)("td",{className:"diff-cell",children:"+67%"})]})]})]})}),(0,i.jsx)("h2",{id:"tracing-observability","data-toc":"Observability",children:"Does MLflow AI Gateway Include Built-in Tracing?"}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"Yes \u2014 MLflow AI Gateway captures every request as a trace automatically when usage tracking is enabled, with no external tool required. LiteLLM has no built-in tracing and depends on an external callback such as Datadog or Langfuse."})," ","Tracing is essential for understanding how AI applications behave in production. For gateway deployments, teams need visibility into every request flowing through the system, including latency, token usage, costs, and errors."]}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"LiteLLM"})," does not include built-in tracing. To gain observability into gateway traffic, teams must configure an external tool such as Datadog or Langfuse as a callback handler. This means operating and maintaining a separate observability system alongside the gateway. LiteLLM also has no support for distributed tracing, so client-side agent traces and proxy-side request logs remain disconnected, making end-to-end debugging difficult."]}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"MLflow"}),"'s AI Gateway provides"," ",(0,i.jsx)("strong",{children:"native tracing out of the box"}),". When"," ",(0,i.jsx)(r.A,{to:`${d.jT}governance/ai-gateway/usage-tracking/`,children:"usage tracking"})," ","is enabled on an endpoint, every gateway request is automatically logged as a trace with full detail: latency, token consumption, and errors, with no code changes required (and cost once model pricing is configured). MLflow also supports"," ",(0,i.jsx)("strong",{children:(0,i.jsx)(r.A,{to:`${d.jT}tracing/app-instrumentation/distributed-tracing/`,children:"distributed tracing"})})," ","via the W3C TraceContext standard, which allows client-side agent traces to automatically link to gateway traces. This gives teams end-to-end visibility from agent orchestration through the gateway down to the LLM provider, all in a single trace view."]}),(0,i.jsxs)("p",{children:["Beyond the gateway, MLflow provides a ",(0,i.jsx)("strong",{children:"one-line"})," ",(0,i.jsx)("code",{children:"autolog()"})," API for ",(0,i.jsx)("strong",{children:"30+ frameworks"}),", including OpenAI, LangGraph, DSPy, Anthropic, LangChain, Pydantic AI, CrewAI, and many more. Traces capture full span-level detail across the entire application stack and can be viewed, searched, and analyzed directly in the MLflow UI."]}),(0,i.jsx)(k,{tabs:y}),(0,i.jsx)("h2",{id:"ai-platform","data-toc":"AI Platform",children:"Beyond a Gateway: MLflow as a Complete AI Platform"}),(0,i.jsxs)("p",{children:["A gateway is only one piece of a production AI stack. Teams also need observability, evaluation, prompt management, and model governance. ",(0,i.jsx)("strong",{children:"LiteLLM"})," does not offer any of these capabilities. Teams using LiteLLM must adopt and integrate separate tools for each of these needs, creating operational complexity and tool sprawl."]}),(0,i.jsxs)("p",{children:[(0,i.jsx)("strong",{children:"MLflow"})," is a"," ",(0,i.jsx)(r.A,{to:"/ai-platform",children:"complete AI engineering platform"})," that covers the entire lifecycle:"]}),(0,i.jsxs)("ul",{children:[(0,i.jsxs)("li",{children:[(0,i.jsx)(r.A,{to:`${d.jT}tracing/`,children:(0,i.jsx)("strong",{children:"Observability"})})," ","with one-line ",(0,i.jsx)("code",{children:"autolog()"})," for 30+ frameworks and built-in distributed tracing across client and gateway"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)(r.A,{to:`${d.jT}evaluation/`,children:(0,i.jsx)("strong",{children:"Agent evaluation"})})," ","with built-in scorers, integration with leading evaluation libraries (RAGAS, DeepEval, Phoenix, TruLens, Guardrails AI), multi-turn evaluation, online evaluation, and LLM judge alignment with human feedback"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)(r.A,{to:`${d.jT}prompt-registry/`,children:(0,i.jsx)("strong",{children:"Prompt engineering"})})," ","with a versioned prompt registry, lineage tracking, and"," ",(0,i.jsx)(r.A,{to:`${d.jT}prompt-registry/optimize-prompts/`,children:"automatic optimization"})," ","that improves prompts based on evaluation results using the state-of-the-art algorithms like GEPA."]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("strong",{children:"Fine-tuning and reinforcement learning"})," support with Transformers, PEFT, Unsloth, and TRL"]})]}),(0,i.jsx)("div",{className:"screenshot-wrap",children:(0,i.jsx)("img",{src:x,alt:"MLflow evaluation UI showing scorers, results, and detailed asse
470ssment views"})}),(0,i.jsx)("h2",{children:"Should You Choose MLflow AI Gateway or LiteLLM?"}),(0,i.jsxs)("p",{children:[(0,i.jsxs)("strong",{children:["Choose ",(0,i.jsx)(r.A,{href:"https://www.litellm.ai/",children:"LiteLLM"})]})," ","if you need a ",(0,i.jsx)("strong",{children:"dedicated LLM proxy"})," for model routing, use long-tail LLM providers that only LiteLLM supports, or are already integrated with ",(0,i.jsx)("strong",{children:"LiteLLM's client SDK"})," ","and proxy in your stack."]}),(0,i.jsxs)("p",{children:[(0,i.jsxs)("strong",{children:["Choose ",(0,i.jsx)(r.A,{to:"/",children:"MLflow"})]})," ","if you need a ",(0,i.jsx)("strong",{children:"secure AI gateway"})," trusted by enterprises, with ",(0,i.jsx)("strong",{children:"native observability"})," and evaluation integrated with your gateway. MLflow covers the entire AI lifecycle: gateway, tracing, evaluation, prompt optimization, all in one platform. Teams who build production-grade LLM applications and agents should choose MLflow."]}),(0,i.jsx)("h2",{id:"faq","data-toc":"FAQ",children:"Frequently Asked Questions"}),(0,i.jsx)("div",{className:"faq-list",children:a.map((a,s)=>(0,i.jsxs)("div",{className:"faq-item",children:[(0,i.jsxs)("button",{className:"faq-question",onClick:()=>t(e===s?null:s),children:[(0,i.jsx)("span",{children:a.question}),(0,i.jsx)("span",{className:`faq-chevron ${e===s?"open":""}`,children:"\u25BC"})]}),e===s&&(0,i.jsx)("div",{className:"faq-answer",children:a.answer})]},s))}),(0,i.jsx)("h2",{children:"Related Resources"}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:(0,i.jsx)(r.A,{to:"/ai-gateway",children:"What is AI Gateway?"})}),(0,i.jsx)("li",{children:(0,i.jsx)(r.A,{to:"/ai-platform",children:"What is AI Platform?"})}),(0,i.jsx)("li",{children:(0,i.jsx)(r.A,{to:`${d.jT}governance/ai-gateway/`,children:"MLflow AI Gateway Guide"})}),(0,i.jsx)("li",{children:(0,i.jsx)(r.A,{to:`${d.jT}tracing/quickstart/`,children:"MLflow Tracing Quickstart"})}),(0,i.jsx)("li",{children:(0,i.jsx)(r.A,{to:d.jT,children:"MLflow Documentation"})}),(0,i.jsx)("li",{children:(0,i.jsx)(r.A,{href:"https://docs.litellm.ai/docs/",children:"LiteLLM Documentation"})}),(0,i.jsx)("li",{children:(0,i.jsx)(r.A,{to:"/llmops",children:"LLMOps Guide"})})]})]}),(0,i.jsx)(c.B,{})]})]})}},53440(e,t,a){a.d(t,{GO:()=>o,cn:()=>r,kB:()=>l});var i=a(34164),s=a(50856),n=a(57432);function r(...e){return(0,s.QP)((0,i.$)(e))}function o(e,t,a){return e.startsWith(t)?"/classical-ml#get-started":e.startsWith(a)?({[`${a}`]:n.jT,[`${a}/`]:n.jT,[`${a}/observability`]:`${n.jT}tracing/quickstart/`,[`${a}/evaluations`]:`${n.jT}eval-monitor/quickstart/`,[`${a}/prompt-registry`]:`${n.jT}prompt-registry/create-and-edit-prompts/`,[`${a}/ai-gateway`]:`${n.jT}governance/ai-gateway/setup/`,[`${a}/governance`]:n.jT,[`${a}/human-feedback`]:n.jT})[e]||n.jT:"/#get-started"}function l(e,t){return e.startsWith(t)}},13497(e,t,a){a.d(t,{b:()=>i});function i(){!function({id:e,name:t,value:a=1,currency:i="USD"}){if("u"<typeof window)return;let s={transaction_id:`${e}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`,value:a,currency:i,items:[{item_id:e,item_name:t,quantity:1}]};window.dataLayer=window.dataLayer||[],window.dataLayer.push({ecommerce:null}),window.dataLayer.push({event:"purchase",ecommerce:s}),"function"==typeof window.gtag&&window.gtag("event","purchase",s)}({id:"try_demo",name:"Try Demo"})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.