PageSourceSearch

https://mlflow.org/assets/js/c00a1799.039a87f4.js

js mlflow.org collected 2026-09-24 08:27:22 UTC 61,866 bytes, 470 lines download raw bytes

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.