PageSourceSearch

https://mlflow.org/assets/js/3b18c73f.be391132.js

js mlflow.org collected 2026-09-24 08:27:29 UTC 70,690 bytes, 339 lines download raw bytes

1"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1179"],{1751(e,t,n){n.d(t,{A:()=>s});var a,i=n(96540);function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let s=({title:e,titleId:t,...n})=>i.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",width:109,height:40,fill:"none",viewBox:"0 0 109 40","aria-labelledby":t},n),e?i.createElement("title",{id:t},e):null,a||(a=i.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"})))},22521(e,t,n){n.d(t,{A:()=>s});var a,i=n(96540);function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let s=({title:e,titleId:t,...n})=>i.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",width:48,height:48,fill:"none",viewBox:"0 0 48 48","aria-labelledby":t},n),e?i.createElement("title",{id:t},e):null,a||(a=i.createElement("path",{stroke:"#fff",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M37.061 24v8.845H14.717a4.06 4.06 0 0 0-2.903 1.227 4.23 4.23 0 0 0-1.202 2.962c0 1.112.433 2.177 1.202 2.963a4.06 4.06 0 0 0 2.903 1.227h5.472m-2.28-26.534h11.856m-11.856 7.448h6.384M14.26 6.776h22.801v34.448h-22.8a3.6 3.6 0 0 1-2.58-1.09 3.76 3.76 0 0 1-1.069-2.634v-27c0-.988.385-1.935 1.069-2.633a3.6 3.6 0 0 1 2.58-1.091"})))},83247(e,t,n){n.d(t,{A:()=>s});var a,i=n(96540);function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let s=({title:e,titleId:t,...n})=>i.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",width:48,height:48,fill:"none",viewBox:"0 0 48 48","aria-labelledby":t},n),e?i.createElement("title",{id:t},e):null,a||(a=i.createElement("path",{fill:"#fff",d:"M24 3.901c11.05 0 20 8.95 20 20a20.03 20.03 0 0 1-13.625 18.975c-1 .2-1.375-.425-1.375-.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.4.225-5 .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.375 9.1 9.875-.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.95A19.99 19.99 0 0 1 4 23.901c0-11.05 8.95-20 20-20"})))},82484(e,t,n){n.d(t,{A:()=>s});var a,i=n(96540);function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let s=({title:e,titleId:t,...n})=>i.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",width:48,height:48,fill:"none",viewBox:"0 0 48 48","aria-labelledby":t},n),e?i.createElement("title",{id:t},e):null,a||(a=i.createElement("path",{fill:"#fff",d:"M39.3 6H8.7A2.7 2.7 0 0 0 6 8.7v30.6A2.7 2.7 0 0 0 8.7 42h30.6a2.7 2.7 0 0 0 2.7-2.7V8.7A2.7 2.7 0 0 0 39.3 6M16.8 36.6h-5.4V20.4h5.4zm-2.7-19.35a3.15 3.15 0 1 1 3.24-3.15 3.204 3.204 0 0 1-3.24 3.15M36.6 36.6h-5.4v-8.532c0-2.556-1.08-3.474-2.484-3.474a3.13 3.13 0 0 0-2.916 3.348 1.2 
11.2 0 0 0 0 .252V36.6h-5.4V20.4h5.22v2.34a5.6 5.6 0 0 1 4.86-2.52c2.79 0 6.048 1.548 6.048 6.588z"})))},27482(e,t,n){n.d(t,{A:()=>s});var a,i=n(96540);function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let s=({title:e,titleId:t,...n})=>i.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",width:48,height:48,fill:"none",viewBox:"0 0 48 48","aria-labelledby":t},n),e?i.createElement("title",{id:t},e):null,a||(a=i.createElement("path",{fill:"#fff",d:"M12.737 29.12a4.09 4.09 0 0 1-4.096 4.096 4.09 4.09 0 0 1-4.095-4.096 4.09 4.09 0 0 1 4.095-4.095h4.096zm2.048 0a4.09 4.09 0 0 1 4.095-4.095 4.09 4.09 0 0 1 4.096 4.096v10.238a4.09 4.09 0 0 1-4.096 4.096 4.09 4.09 0 0 1-4.095-4.096zM18.88 12.676a4.09 4.09 0 0 1-4.095-4.095 4.09 4.09 0 0 1 4.096-4.096 4.09 4.09 0 0 1 4.095 4.096v4.095zm0 2.08a4.09 4.09 0 0 1 4.096 4.095 4.09 4.09 0 0 1-4.095 4.095H8.61a4.09 4.09 0 0 1-4.095-4.095 4.09 4.09 0 0 1 4.095-4.096zM35.293 18.85a4.09 4.09 0 0 1 4.096-4.095 4.09 4.09 0 0 1 4.095 4.096 4.09 4.09 0 0 1-4.095 4.095h-4.096zm-2.047 0a4.09 4.09 0 0 1-4.096 4.096 4.09 4.09 0 0 1-4.095-4.095V8.58a4.09 4.09 0 0 1 4.095-4.096 4.09 4.09 0 0 1 4.096 4.096zM29.15 35.264a4.09 4.09 0 0 1 4.096 4.095 4.09 4.09 0 0 1-4.096 4.096 4.09 4.09 0 0 1-4.095-4.096v-4.095zm0-2.048a4.09 4.09 0 0 1-4.095-4.096 4.09 4.09 0 0 1 4.095-4.095h10.27a4.09 4.09 0 0 1 4.095 4.096 4.09 4.09 0 0 1-4.095 4.095z"})))},57702(e,t,n){n.d(t,{A:()=>s});var a,i=n(96540);function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let s=({title:e,titleId:t,...n})=>i.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",width:48,height:48,fill:"none",viewBox:"0 0 48 48","aria-labelledby":t},n),e?i.createElement("title",{id:t},e):null,a||(a=i.createElement("path",{fill:"#fff",d:"M27.235 21.713 39.892 7h-3l-10.99 12.775L17.124 7H7l13.274 19.318L7 41.748h3l11.606-13.492 9.27 13.491H41L27.234 21.713m-4.109 4.775-1.345-1.923-10.7-15.307h4.606l8.636 12.353 1.345 1.924 11.226 16.057h-4.607l-9.16-13.103"})))},49993(e,t,n){n.d(t,{A:()=>s});var a,i=n(96540);function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let s=({title:e,titleId:t,...n})=>i.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",width:49,height:48,fill:"none",viewBox:"0 0 49 48","aria-labelledby":t},n),e?i.createElement("title",{id:t},e):null,a||(a=i.createElement("path",{fill:"#fff",fillRule:"evenodd",d:"M41.075 8.016c1.808.56 3.23 2.203 3.713 4.294.875 3.786.879 11.69.879 11.69s0 7.904-.879 11.69c-.484 2.092-1.905 3.735-3.713 4.294C37.801 41 24.667 41 24.667 41s-13.135 0-16.409-1.016c-1.808-.56-3.23-2.202-3.713-4.293C3.667 31.904 3.667 24 3.667 24s0-7.904.878-11.69c.484-2.091 1.905-3.735 3.713-4.294C11.532 7 24.667 7 24.667 7S37.8 7 41.075 8.016M31.693 24 20.263 30.6V17.4z",clipRule:"evenodd"})))},89796(e,t,n){n.d(t,{A:()=>a});let a=n.p+"assets/images/GenAI_observability_hero-b6d6f93d91d8ed758cb0f86613e685dd.png"},70418(e,t,n){n.d(t,{A:()=>a});let a=n.p+"assets/medias/demo-experiment-66da0f0966955923c429a9c08674f579.mp4"},24937(e,t,n){n.d(t,{B:()=>s});var a=n(74848),i=n(96540),r=n(57432);function s(){let[e,t]=(0,i.useState)([]);return((0,i.useEffect)(()=>{let e=document.querySelector(".article-container");if(!e)return;let n=e.querySelectorAll("h2[id]"),a=[];n.forEach(e=>{a.push({id:e.id,text:e.getAttribute("data-toc")||e.textContent||""})}),t(a)},[]),0===e.length)?null:(0,a.jsxs)("aside",{className:"article-sidebar",children:[(0,a.jsx)("p",{className:"toc-title",children:"On this page"}),(0,a.jsx)("ul",{children:e.map(e=>(0,a.jsx)("li",{children:(0,a.jsx)("a",{href:`#${e.id}`,children:e.text})},e.id))}),(0,a.jsx)("hr",{className:"toc-divider"}),(0,a.jsx)("p",{className:"toc-title",children:"Resources"}),(0,a.jsxs)("ul",{children:[(0,a.jsx)("li",{children:(0,a.jsx)("a",{href:"/faq",children:"MLflow FAQ"})}),(0,a.jsx)("li",{children:(0,a.jsx)("a",{href:r.jT,children:"Documentation"})}),(0,a.jsx)("li",{children:(0,a.jsx)("a",{href:"https://go.mlflow.org/slack",children:"Slack"})}),(0,a.jsx)("li",{children:(0,a.jsx)("a",{href:"https://github.com/mlflow/mlflow",children:"GitHub"})})]})]})}},35209(e,t,n){n.d(t,{$:()=>s});var a=n(74848),i=n(96540);let r=(0,n(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"}}),s=i.forwardRef(({className:e,variant:t,size:n,width:i,asChild:s=!1,...o},l)=>(0,a.jsx)("button",{className:r({variant:t,size:n,width:i,className:e}),ref:l,...o}));s.displayName="Button"},77114(e,t,n){n.d(t,{i:()=>o});var a=n(74848),i=n(96540),r=n(49548),s=n(11490);let o=({code:e,className:t=""})=>{let[n,o]=(0,i.useState)(!1),l=(0,i.useCallback)(async()=>{try{await navigator.clipboard.writeText(e),o(!0),setTimeout(()=>
1o(!1),2e3)}catch{}},[e]);return(0,a.jsx)("button",{onClick:l,className:`p-1.5 rounded bg-white/10 hover:bg-white/20 transition-colors ${t}`,"aria-label":n?"Copied!":"Copy code",children:(0,a.jsx)(r.N,{mode:"wait",initial:!1,children:n?(0,a.jsx)(s.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,a.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})},"check"):(0,a.jsx)(s.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,a.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,n){n.d(t,{AS:()=>i,o:()=>s,zv:()=>r});var a=n(71765);let i={...a.Zj.nightOwl,styles:a.Zj.nightOwl.styles.map(e=>e.types.includes("string")?{...e,style:{...e.style,color:"#58a6ff"}}:e)},r={...a.Zj.nightOwl,styles:a.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)},s="#0d1117"},27721(e,t,n){n.d(t,{Ei:()=>h,xA:()=>c});var a=n(74848),i=n(22732),r=n(50856),s=n(96540);let o=(0,i.F)("w-full overflow-hidden"),l=(0,i.F)(["grid w-full bg-[rgba(255,255,255,0.08)] gap-[1px]","border-[rgba(255,255,255,0.08)] border-t border-b","-mx-10 w-[calc(100%+var(--spacing)*10*2)]"],{variants:{columns:{default:"md:auto-cols-fr md:grid-flow-col",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4"}},defaultVariants:{columns:"default"}}),c=({children:e,className:t,columns:n})=>{let i,c=0;s.Children.forEach(e,e=>{s.isValidElement(e)&&("width"in e.props&&"wide"===e.props.width?c+=2:c+=1)});let d=0;return"number"==typeof n&&(d=Math.ceil(c/n)*n-c),(0,a.jsx)("div",{className:o(),children:(0,a.jsxs)("div",{className:(i={columns:n,className:t},(0,r.QP)(l(i))),children:[e,Array.from({length:d},(e,t)=>(0,a.jsx)(h,{filler:!0},t))]})})},d=(0,i.F)(["flex-col items-start p-10 gap-20 justify-between w-full bg-[#0E1416]"],{variants:{width:{narrow:"",wide:"md:col-span-2 md:flex-row *:flex-1 md:items-center"},direction:{reverse:"md:flex-col-reverse"},filler:{true:"hidden md:flex",false:"flex"}},compoundVariants:[{width:"wide",direction:"reverse",className:"md:flex-row-reverse"}],defaultVariants:{width:"narrow"}}),h=({children:e,width:t,direction:n,filler:i=!1})=>{let s;return(0,a.jsx)("div",{className:(s={width:t,direction:n,filler:i},(0,r.QP)(d(s))),children:e})}},11651(e,t,n){n.d(t,{Y:()=>R});var a,i=n(74848),r=n(96540),s=n(95310),o=n(56347),l=n(66497),c=n(1751);function d(){return(d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let h=({title:e,titleId:t,...n})=>r.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",width:16,height:17,fill:"none",viewBox:"0 0 16 17","aria-labelledby":t},n),e?r.createElement("title",{id:t},e):null,a||(a=r.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=n(53440),m=n(98749),g=n(41181),u=n(35209);let x=({href:e,label:t,className:n,onMouseEnter:a,hasDropdown:r,...o})=>(0,i.jsxs)(s.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",n),...o,children:[t,r&&(0,i.jsx)(h,{className:"w-6 h-6"})]});var f=n(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"),j=(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"),b=(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"),T=()=>(0,i.jsxs)("div",{className:w(),children:[(0,i.jsxs)("div",{className:j(),children:[(0,i.jsx)("div",{className:y(),children:(0,i.jsxs)(s.A,{to:"/genai",children:[(0,i.jsx)("h3",{className:b(),children:"LLMs & Agents"}),(0,i.jsx)("p",{className:v(),children:"The leading open source AI engineering platform"})]})}),(0,i.jsxs)("div",{className:L(),children:[(0,i.jsx)("span",{className:M(),children:"Features"}),(0,i.jsxs)("div",{className:A(),children:[(0,i.jsxs)("div",{className:k(),children:[(0,i.jsx)(x,{href:"/genai/observability",label:"Observability"}),(0,i.jsx)(x,{href:"/genai/evaluations",label:"Evaluations"})]}),(0,i.jsxs)("div",{className:k(),children:[(0,i.jsx)(x,{href:"/genai/prompt-registry",label:"Prompt Registry"}),(0,i.jsx)(x,{href:"/genai/ai-gateway",label:"AI Gateway"})]})]})]})]}),(0,i.jsxs)("div",{className:j(),children:[(0,i.jsx)("div",{className:y(),children:(0,i.jsxs)(s.A,{to:"/classical-ml",children:[(0,i.jsx)("h3",{className:b(),children:"Model Training"}),(0,i.jsx)("p",{className:v(),children:"Mastering the ML lifecycle"})]})}),(0,i.jsxs)("div",{className:L(),children:[(0,i.jsx)("span",{className:M(),children:"Features"}),(0,i.jsxs)("div",{className:A(),children:[(0,i.jsxs)("div",{className:k(),children:[(0,i.jsx)(x,{href:"/classical-ml/experiment-tracking",label:"Experiment tracking"}),(0,i.jsx)(x,{href:"/classical-ml/model-evaluation",label:"Model evaluation"})]}),(0,i.jsxs)("div",{className:k(),children:[(0,i.jsx)(x,{href:"/classical-ml/models",label:"MLflow models"}),(0,i.jsx)(x,{href:"/classical-ml/model-registry",label:"Model Registry & deployment"})]})]})]})]})]});var N=n(57432);let I=(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"),O=(0,f.F)("text-white transition-colors duration-200 group-hover:!text-white/60"),C=(0,f.F)("text-[#F7F8F8]/60 m-0"),E=()=>(0,i.jsxs)("div",{className:I(),children:[(0,i.jsx)("div",{className:S(),children:(0,i.jsxs)(s.A,{to:N.jT,children:[(0,i.jsx)("h3",{className:O(),children:"LLMs & Agents"}),(0,i.jsx)("p",{className:C(),children:"Debug, evaluate, monitor, and optimize your AI agents and LLM applications, with production-grade tracing, evaluation, prompt management, and much more."})]})}),(0,i.jsx)("div",{className:S(),children:(0,i.jsxs)(s.A,{to:N.cf,children:[(0,i.jsx)("h3",{className:O(),children:"Model Training"}),(0,i.jsx)("p",{className:C(),children:"Manage the full machine learning and deep learning model lifecycle, with experiment tracking, hyperparameter tuning, and beyond."})]})})]}),q=(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"),z=(0,f.F)("flex flex-col gap-1 md:gap-2 pb-4 flex-1 group"),F=(0,f.F)("text-white transition-colors duration-200 group-hover:!text-white/60"),D=(0,f.F)("text-[#F7F8F8]/60 m-0"),W=()=>(0,i.jsxs)("div",{className:q(),children:[(0,i.jsx)("div",{className:z(),children:(0,i.jsxs)(s.A,{to:"/cookbook",children:[(0,i.jsx)("h3",{className:F(),children:"Cookbook"}),(0,i.jsx)("p",{className:D(),children:"Hands-on guides and code examples for building Agents and LLM applications with MLflow."})]})}),(0,i.jsx)("div",{className:z(),children:(0,i.jsxs)(s.A,{to:"/ambassadors",children:[(0,i.jsx)("h3",{className:F(),children:"Ambassador Program"}),(0,i.jsx)("p",{className:D(),children:"Join the MLflow community as an ambassador and help shape the future of ML tooling."})]})})]});var P=n(13497);let _=()=>{let e=(0,m.S)();return(0,i.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,i.jsx)("svg",{viewBox:"0 0 48 48",fill:"none",className:"w-4 h-4",children:(0,i.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,i.jsx)(g.A,{className:"w-3 h-3",fill:"currentColor"}),e&&(0,i.jsx)("span",{className:"font-medium",children:e})]})},B=(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:""}}}),R=()=>{let[e,t]=(0,r.useState)(!1),[n,a]=(0,r.useState)(!1),[d,m]=(0,r.useState)(!1),[g,f]=(0,r.useState)(!1),[w,j]=(0,r.useState)(!1),[y,b]=(0,r.useState)(!1),[v,L]=(0,r.useState)(!1),M=(0,o.zy)(),A=(0,l.Ay)("/classical-ml"),k=(0,l.Ay)("/genai"),I=(0,p.GO)(M.pathname,A,k);return(0,r.useLayoutEffect)(()=>{let e=()=>{window.innerWidth>=640&&t(!1)};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),(0,r.useEffect)(()=>{e?document.body.classList.add("noScroll"):(document.body.classList.remove("noScroll"),m(!1),j(!1),L(!1))},[e]),(0,i.jsxs)("nav",{className:B({isOpen:e}),children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-center mx-auto px-6 lg:px-20 py-2 max-w-container",children:[(0,i.jsxs)("div",{className:"md:contents flex flex-row justify-between w-full sticky top-[8px]",children:[(0,i.jsx)(s.A,{href:"/",className:"flex items-center space-x-3 rtl:space-x-reverse grow basis-0","aria-label":"MLflow Home",children:(0,i.jsx)(c.A,{className:"h-[36px]","aria-hidden":"true"})}),(0,i.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,i.jsx)(_,{}),(0,i.jsx)(s.A,{href:I,className:"hidden md:block",children:(0,i.jsx)(u.$,{variant:"outline",size:"small",children:"Get Started"})}),(0,i.jsx)(s.A,{href:N.MG,className:"hidden md:block",onClick:P.b,children:(0,i.jsx)(u.$,{variant:"primary",size:"small",children:"Try Demo"})}),(0,i.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,i.jsx)("span",{className:"sr-only",children:"Open main menu"}),(0,i.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,i.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M1 1h15M1 7h15M1 13h15"})})]})]})]}),(0,i.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,i.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,i.jsxs)("li",{className:"w-full md:w-auto md:hidden",children:[(0,i.jsxs)("button",{type:"button",onClick:()=>{let e=!d;m(e),e&&(j(!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,i.jsx)(h,{className:(0,p.cn)("w-6 h-6 transition-transform duration-300",d&&"rotate-180")})]}),(0,i.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,i.jsx)(T,{})})]}),(0,i.jsx)("li",{className:"w-full md:w-auto hidden md:block",onMouseEnter:()=>{a(!0),f(!1),b(!1)},onClick:()=>{a(!n)},children:(0,i.jsx)(x,{label:"Components",hasDropdown:!0})}),(0,i.jsx)("li",{className:"w-full md:w-auto",children:(0,i.jsx)(x,{href:"/releases",label:"Releases"})}),(0,i.jsx)("li",{className:"w-full md:w-auto",children:(0,i.jsx)(x,{href:"/blog",label:"Blog"})}),(0,i.jsxs)("li",{className:"w-full md:w-auto md:hidden",children:[(0,i.jsxs)("button",{type:"button",onClick:()=>{let e=!w;j(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,i.jsx)(h,{className:(0,p.cn)("w-6 h-6 transition-transform duration-300",w&&"rotate-180")}
1)]}),(0,i.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,i.jsx)(E,{})})]}),(0,i.jsx)("li",{className:"w-full md:w-auto hidden md:block",onMouseEnter:()=>{f(!0),a(!1),b(!1)},onClick:()=>{f(!g)},children:(0,i.jsx)(x,{label:"Docs",hasDropdown:!0})}),(0,i.jsxs)("li",{className:"w-full md:w-auto md:hidden",children:[(0,i.jsxs)("button",{type:"button",onClick:()=>{let e=!v;L(e),e&&(m(!1),j(!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,i.jsx)(h,{className:(0,p.cn)("w-6 h-6 transition-transform duration-300",v&&"rotate-180")})]}),(0,i.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,i.jsx)(W,{})})]}),(0,i.jsx)("li",{className:"w-full md:w-auto hidden md:block",onMouseEnter:()=>{b(!0),a(!1),f(!1)},onClick:()=>{b(!y)},children:(0,i.jsx)(x,{label:"Resources",hasDropdown:!0})}),(0,i.jsxs)("li",{className:"w-full md:w-auto md:hidden flex flex-col gap-2",children:[(0,i.jsx)(s.A,{href:I,children:(0,i.jsx)(u.$,{variant:"outline",size:"small",width:"full",children:"Get Started"})}),(0,i.jsx)(s.A,{href:N.MG,onClick:P.b,children:(0,i.jsx)(u.$,{variant:"primary",size:"small",width:"full",children:"Try Demo"})})]})]})})]}),(0,i.jsx)("div",{className:(0,p.cn)("flex-col w-full py-6",n?"flex":"hidden"),onMouseLeave:()=>{a(!1)},children:(0,i.jsx)(T,{})}),(0,i.jsx)("div",{className:(0,p.cn)("flex-col w-full py-6",g?"flex":"hidden"),onMouseLeave:()=>{f(!1)},children:(0,i.jsx)(E,{})}),(0,i.jsx)("div",{className:(0,p.cn)("flex-col w-full py-6",y?"flex":"hidden"),onMouseLeave:()=>{b(!1)},children:(0,i.jsx)(W,{})})]})}},73331(e,t,n){n.d(t,{K:()=>g});var a=n(74848),i=n(98749),r=n(42516),s=n(27721),o=n(83247),l=n(49993),c=n(22521),d=n(82484),h=n(57702),p=n(27482),m=n(57432);function g(){let e=(0,i.S)();return(0,a.jsx)("div",{style:{background:"#0E1416",padding:"48px 40px"},children:(0,a.jsxs)(s.xA,{className:"px-10",children:[(0,a.jsx)(r.p,{href:m.jT,icon:(0,a.jsx)("div",{children:(0,a.jsx)(c.A,{})}),label:"Documentation",description:"Read Docs"}),(0,a.jsx)(r.p,{href:"https://github.com/mlflow/mlflow",icon:(0,a.jsx)(o.A,{}),label:"GitHub",description:e?`${e} stars`:"Star us"}),(0,a.jsx)(r.p,{href:"https://www.linkedin.com/company/mlflow-org",icon:(0,a.jsx)(d.A,{}),label:"LinkedIn",description:"75k followers"}),(0,a.jsx)(r.p,{href:"https://www.youtube.com/@mlflowoss",icon:(0,a.jsx)(l.A,{}),label:"YouTube",description:"View tutorials"}),(0,a.jsx)(r.p,{href:"https://x.com/mlflow",icon:(0,a.jsx)(h.A,{}),label:"X",description:"Follow us on X"}),(0,a.jsx)(r.p,{href:"https://go.mlflow.org/slack",icon:(0,a.jsx)(p.A,{}),label:"Slack",description:"Join our Slack"})]})})}},42516(e,t,n){n.d(t,{p:()=>c});var a,i=n(74848),r=n(95310),s=n(96540);function o(){return(o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(null,arguments)}let l=({title:e,titleId:t,...n})=>s.createElement("svg",o({xmlns:"http://www.w3.org/2000/svg",width:25,height:24,fill:"none",viewBox:"0 0 25 24","aria-labelledby":t},n),e?s.createElement("title",{id:t},e):null,a||(a=s.createElement("path",{stroke:"#fff",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"m9.667 4 8 8-8 8"}))),c=({href:e,icon:t,label:n,description:a})=>(0,i.jsxs)(r.A,{href:e,target:"_blank",className:"flex sm:flex-row md:flex-col xl:flex-row group w-full sm:items-center md:items-start xl:items-center p-8 h-full cursor-pointer gap-6 hover:bg-white/4 bg-[#0E1416]",children:[t,(0,i.jsxs)("div",{className:"flex flex-row justify-between items-center w-full",children:[(0,i.jsxs)("div",{className:"flex flex-col",children:[(0,i.jsx)("span",{className:"text-white text-lg font-medium",children:n}),(0,i.jsx)("span",{className:"text-gray-600 text-base",children:a})]}),(0,i.jsx)("div",{className:"invisible group-hover:visible",children:(0,i.jsx)(l,{})})]})]})},57432(e,t,n){n.d(t,{$i:()=>l,MG:()=>i,OU:()=>a,Q5:()=>o,cf:()=>s,jT:()=>r});let a="https://mlflow.org/docs/latest/",i="https://demo.mlflow.org/#/experiments/1",r="https://mlflow.org/docs/latest/genai/",s="https://mlflow.org/docs/latest/ml/",o="https://signup.databricks.
1com/?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,n){n.d(t,{S:()=>r});var a=n(96540);let i="mlflow_github_stars";function r(){let[e,t]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let e=localStorage.getItem(i);if(e){let{value:n,timestamp:a}=JSON.parse(e);if(Date.now()-a<36e5)return void t(n)}fetch("https://api.github.com/repos/mlflow/mlflow").then(e=>e.json()).then(e=>{if(e.stargazers_count){var n;let a=(n=e.stargazers_count)>=1e3?`${Math.floor(n/1e3)}K`:String(n);t(a),localStorage.setItem(i,JSON.stringify({value:a,timestamp:Date.now()}))}}).catch(()=>{})},[]),e}},91398(e,t,n){n.r(t),n.d(t,{default:()=>y});var a=n(74848),i=n(96540),r=n(53572),s=n(95310),o=n(71765),l=n(11651),c=n(73331),d=n(24937),h=n(57432),p=n(89796),m=n(77114),g=n(50321);let u="LLM Tracing & AI Tracing for Agents | MLflow AI Platform",x="LLM tracing (or AI tracing) records every step of agent execution \u2014 inputs, outputs, latency, and costs. Explore LLM tracing on MLflow's open source AI platform.",f=[{question:"What is LLM tracing?",answer:"LLM tracing is the practice of capturing detailed execution data for every large language model call in your application, including prompts, completions, model parameters, token counts, latency, and metadata. It creates a complete audit trail showing exactly what happened during each LLM request."},{question:"How is LLM tracing different from traditional logging?",answer:"Traditional logging captures errors and discrete events. LLM tracing captures the full context of AI execution: prompts, responses, tool calls, retrieval results, model parameters, token usage, and nested spans showing multi-step reasoning. It's structured, queryable, and designed specifically for debugging non-deterministic AI systems."},{question:"What is AI tracing?",answer:"AI tracing is the broader practice of capturing execution data across all AI system components\u2014LLMs, embeddings, retrievers, agents, RAG pipelines, and more. It extends LLM tracing to cover the entire AI application stack, not just model calls."},{question:"What is agent tracing?",answer:"Agent tracing captures the multi-step execution graph of autonomous agents, showing how they reason, which tools they call, how they handle errors, and how they chain multiple LLM calls together. It extends LLM tracing to reveal the complete decision-making process of agentic systems built with frameworks like LangGraph, CrewAI, or AutoGen."},{question:"Do I need LLM tracing for my application?",answer:"Yes, if you're building production LLM applications or agents. LLM tracing is essential for debugging unexpected outputs, optimizing token costs, monitoring quality over time, and understanding why your AI system behaves the way it does. Without tracing, you're blind to what's actually happening inside your AI application."},{question:"What's the difference between tracing and observability?",answer:"Tracing is one component of observability. Tracing captures execution data (what happened, when, and how). Observability combines tracing with evaluation (quality assessment), monitoring (metrics over time), and feedback collection to give you complete visibility into your AI system's behavior and quality."},{question:"What is the best LLM tracing tool?",answer:"The best LLM tracing tool depends on your needs. MLflow is the leading open source option, with over 30 million monthly downloads. Thousands of organizations, developers, and research teams use MLflow each day to build and deploy production-grade agents and LLM applications. It offers automatic tracing for 50+ LLM providers and agent frameworks with no vendor lock-in. MLflow is fully OpenTelemetry compatible, giving you total ownership of your trace data."},{question:"What LLM providers and frameworks does MLflow support?",answer:"MLflow supports any LLM provider and framework. This includes OpenAI, Anthropic (Claude), AWS Bedrock, Google Gemini, Azure OpenAI, Mistral, Cohere, AI21, Together AI, Anyscale, vLLM, Ollama, and more. For frameworks: LangChain, LangGraph, LlamaIndex, CrewAI, AutoGen, DSPy, Haystack, Semantic Kernel, Vercel AI SDK, and many others. MLflow is OpenTelemetry compatible, so it works with any language or tool."},{question:"How does MLflow tracing compare to other tools?",answer:"Unlike proprietary tracing tools that lock you into a vendor's ecosystem, MLflow provides complete, open source tracing with no vendor lock-in. It supports any LLM or agent framework, is OpenTelemetry compatible, and gives you full control over your trace data. MLflow is also available on Databricks, AWS, and other platforms."},{question:"Is MLflow free for LLM tracing?",answer:"Yes. MLflow is 100% open source under the Apache 2.0 license, backed by the Linux Foundation. You can use all of its tracing features for free, including in commercial applications. There are no per-trace fees, no usage limits, and no vendor lock-in."},{question:"How do I get started with LLM tracing?",answer:(0,a.jsxs)(a.Fragment,{children:["Getting started with MLflow LLM tracing takes just one line of code. Install MLflow, call"," ",(0,a.jsx)(s.A,{href:h.jT+"tracing/quickstart/",children:"mlflow.openai.autolog()"})," ","(or the equivalent for your framework), and every LLM call is automatically traced. See the"," ",(0,a.jsx)(s.A,{href:h.jT+"tracing/",children:"MLflow tracing documentation"})," ","for framework-specific examples."]}),answerText:"Getting started with MLflow LLM tracing takes just one line of code. Install MLflow, call mlflow.openai.autolog() (or the equivalent for your framework), and every LLM call is automatically traced. See the MLflow tracing documentation for framework-specific examples."}
1,{question:"Does MLflow support OpenTelemetry?",answer:"Yes. MLflow's tracing is fully compatible with OpenTelemetry, so you can export traces to any OpenTelemetry-compatible backend. This gives you total ownership and portability of your trace data without vendor lock-in."}],w={"@context":"https://schema.org","@type":"FAQPage",mainEntity:f.map(e=>({"@type":"Question",name:e.question,acceptedAnswer:{"@type":"Answer",text:e.answerText||e.answer}}))},j={"@context":"https://schema.org","@type":"SoftwareApplication",name:"MLflow",applicationCategory:"DeveloperApplication",operatingSystem:"Cross-platform",offers:{"@type":"Offer",price:"0",priceCurrency:"USD"},description:"Open-source platform for LLM tracing, AI observability, experiment tracking, evaluation, and deployment.",url:"https://mlflow.org",license:"https://www.apache.org/licenses/LICENSE-2.0"};function y(){let[e,t]=(0,i.useState)(0);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(r.A,{children:[(0,a.jsx)("title",{children:u}),(0,a.jsx)("meta",{name:"description",content:x}),(0,a.jsx)("meta",{property:"og:title",content:u}),(0,a.jsx)("meta",{property:"og:description",content:x}),(0,a.jsx)("meta",{property:"og:type",content:"website"}),(0,a.jsx)("meta",{property:"og:url",content:"https://mlflow.org/llm-tracing"}),(0,a.jsx)("link",{rel:"canonical",href:"https://mlflow.org/llm-tracing"}),(0,a.jsx)("script",{type:"application/ld+json",children:JSON.stringify(w)}),(0,a.jsx)("script",{type:"application/ld+json",children:JSON.stringify(j)}),(0,a.jsx)("style",{children:`
2          /* Import MLflow docs fonts */
3          @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');
4
5          /* Black header */
6          header, nav {
7            background: #000000 !important;
8          }
9
10          body {
11            background: #ffffff;
12            margin: 0;
13            padding: 0;
14            font-family: 'DM Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
15          }
16          .article-page {
17            background: #ffffff;
18            min-height: 100vh;
19          }
20          .article-container {
21            max-width: 900px;
22            margin: 0 auto;
23            padding: 60px 24px 100px;
24          }
25          .article-container h1 {
26            font-family: 'DM Sans', sans-serif;
27            font-size: 3rem !important;
28            font-weight: 700 !important;
29            color: #1a1a1a !important;
30            margin: 48px 0 32px 0 !important;
31            line-height: 1.0 !important;
32            letter-spacing: -0.03em !important;
33          }
34          .article-container h2 {
35            font-family: 'DM Sans', sans-serif;
36            font-size: 2rem;
37            font-weight: 700;
38            color: #1a1a1a;
39            margin: 64px 0 32px 0;
40            line-height: 1.2;
41            letter-spacing: -0.01em;
42          }
43          .article-container h3 {
44            font-family: 'DM Sans', sans-serif;
45            font-size: 1.5rem;
46            font-weight: 600;
47            color: #1a1a1a;
48            margin: 32px 0 16px 0;
49            line-height: 1.2;
50          }
51          .article-container p {
52            font-family: 'DM Sans', sans-serif;
53            font-size: 16px;
54            color: #3d3d3d;
55            line-height: 1.7;
56            margin: 0 0 24px 0;
57          }
58          .article-container strong {
59            font-weight: 600;
60            color: #1a1a1a;
61          }
62          .article-container a {
63            color: #0194e2 !important;
64            text-decoration: none;
65            transition: all 0.2s ease;
66          }
67          .article-container a:hover {
68            color: #0072b0 !important;
69            text-decoration: underline;
70          }
71          .info-box a {
72            color: #0194e2 !important;
73            font-weight: 500;
74          }
75          .info-box a:hover {
76            color: #0072b0 !important;
77          }
78          .article-container ul {
79            list-style-type: disc;
80            margin: 20px 0;
81            padding-left: 24px;
82            list-style-position: outside;
83          }
84          .article-container li {
85            font-family: 'DM Sans', sans-serif;
86            font-size: 16px;
87            color: #3d3d3d;
88            line-height: 1.7;
89            margin-bottom: 20px;
90            padding-left: 8px;
91            text-wrap: pretty;
92          }
93          .article-container li a {
94            font-weight: 600;
95            color: #0194e2 !important;
96          }
97          .grid-2 {
98            display: grid;
99            grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
100            gap: 24px;
101            margin: 40px 0 56px 0;
102          }
103          .card {
104            background: #ffffff;
105            border: 1px solid #e5e7eb;
106            border-radius: 4px;
107            padding: 32px;
108            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);
109            transition: all 0.3s ease;
110          }
111          .card:hover {
112            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
113            transform: translateY(-2px);
114          }
115          .card h3 {
116            font-family: 'DM Sans', sans-serif;
117            margin-top: 0 !important;
118            margin-bottom: 32px !important;
119            font-size: 1.3rem;
120            font-weight: 600;
121            color: #1a1a1a;
122            line-height: 1.2;
123          }
124          .card p {
125            font-family: 'DM Sans', sans-serif;
126            margin-bottom: 14px;
127            font-size: 14px;
128            line-height: 1.5;
129            color: #505050;
130          }
131          .card p:last-child {
132            margin-bottom: 0;
133          }
134          .faq-list {
135            margin: 32px 0;
136          }
137          .faq-item {
138            border: 1px solid #e5e7eb;
139            border-radius: 4px;
140            margin-bottom: 16px;
141            background: #ffffff;
142            transition: all 0.2s ease;
143          }
144          .faq-item:hover {
145            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
146          }
147          .faq-question {
148            font-family: 'DM Sans', sans-serif;
149            padding: 20px 24px;
150            font-size: 18px;
151            font-weight: 500;
152            color: #1a1a1a;
153            cursor: pointer;
154            background: transparent;
155            border: none;
156            width: 100%;
157            text-align: left;
158            display: flex;
159            justify-content: space-between;
160            align-items: center;
161            transition: background 0.2s ease;
162          }
163          .faq-question:hover {
164            background: #f9fafb;
165          }
166          .faq-answer {
167            font-family: 'DM Sans', sans-serif;
168            padding: 0 24px 20px;
169            font-size: 16px;
170            color: #3d3d3d;
171            line-height: 1.6;
172          }
173          .faq-chevron {
174            transition: transform 0.2s ease;
175            flex-shrink: 0;
176            margin-left: 16px;
177            color: #6b7280;
178            font-size: 12px;
179          }
180          .faq-chevron.open {
181            transform: rotate(180deg);
182          }
183          .info-box {
184            background: rgb(238, 249, 253);
185            border: 1px solid rgb(41, 120, 115);
186            padding: 20px 24px;
187            margin: 40px 0;
188            border-radius: 5.6px;
189          }
190          .info-box p {
191            font-family: 'DM Sans', sans-serif;
192            margin: 0;
193            font-size: 16px;
194            line-height: 1.6;
195            color: #1e293b;
196          }
197          .article-sidebar {
198            position: fixed;
199            top: 100px;
200            left: calc(50% + 900px / 2 + 48px);
201            width: 280px;
202            max-height: calc(100vh - 120px);
203            overflow-y: auto;
204          }
205          .article-sidebar .toc-title {
206            font-family: 'DM Sans', sans-serif;
207            font-size: 13px;
208            font-weight: 600;
209            text-transform: uppercase;
210            letter-spacing: 0.08em;
211            color: #9ca3af;
212            margin: 0 0 12px 0;
213          }
214          .article-sidebar ul {
215            margin: 0;
216            padding: 0;
217            list-style: none;
218            border-left: 1px solid #e5e7eb;
219          }
220          .article-sidebar li {
221            margin: 0;
222            padding: 0;
223          }
224          .article-sidebar a {
225            font-family: 'DM Sans', sans-serif;
226            display: block;
227            padding: 8px 0 8px 16px;
228            font-size: 16px;
229            color: #0194e2 !important;
230            text-decoration: none !important;
231            transition: all 0.15s ease;
232            line-height: 1.4;
233          }
234          .article-sidebar a:hover {
235            color: #0072b0 !important;
236          }
237          .article-sidebar .toc-divider {
238            border: none;
239            border-top: 1px solid #e5e7eb;
240            margin: 12px 0 12px 0;
241          }
242          @media (max-width: 1400px) {
243            .article-sidebar {
244              display: none;
245            }
246          }
247          @media (max-width: 768px) {
248            .article-container {
249              padding: 40px 20px 80px;
250            }
251            .article-container h1 {
252              font-size: 36px !important;
253              margin-bottom: 24px !important;
254            }
255            .article-container h2 {
256              font-size: 28px;
257              margin: 40px 0 20px 0;
258            }
259            .grid-2 {
260              grid-template-columns: 1fr;
261              gap: 20px;
262            }
263            .card {
264              padding: 24px;
265            }
266            .faq-question {
267              padding: 18px 20px;
268              font-size: 17px;
269            }
270            .faq-answer {
271              padding: 0 20px 20px;
272              font-size: 16px;
273            }
274          }
275        `})]}),(0,a.jsxs)("div",{className:"article-page",children:[(0,a.jsx)(l.Y,{}),(0,a.jsxs)("div",{className:"article-container",children:[(0,a.jsx)("h1",{children:"LLM Tracing and AI Tracing"}),(0,a.jsxs)("p",{children:["LLM tracing is the practice of capturing detailed execution data for every large language model call in your application, including prompts, completions, model parameters, token counts, latency, and metadata. When tracing extends beyond individual LLM calls to cover entire AI system stacks (embeddings, retrievers, RAG pipelines), this is known as ",(0,a.jsx)("a",{href:"#ai-tracing",children:"AI tracing"}),". For multi-step autonomous"," ",(0,a.jsx)(s.A,{href:h.jT+"eval-monitor/",children:"agents"}),", tracing the complete decision-making process is known as"," ",(0,a.jsx)("a",{href:"#agent-tracing",children:"agent tracing"}),"."]}),(0,a.jsxs)("p",{children:["LLM tracing is a foundational component of"," ",(0,a.jsx)(s.A,{href:"/ai-observability",children:"AI observability"}),". While observability encompasses tracing, evaluation, monitoring, and feedback collection, tracing provides the raw execution data that makes all other observability capabilities possible. LLM tracing gives engineering teams deep visibility into what their AI applications are actually doing: not just whether they're running, but what prompts are being sent, what responses are being generated, how much they're costing, and where failures occur. As LLM applications move from prototypes to production-critical systems, tracing becomes essential for debugging, optimization, and quality assurance."]}),(0,a.jsxs)("p",{children:["Unlike traditional logging, LLM tracing captures the full context of AI execution in a structured, queryable format. It records"," ",(0,a.jsx)(s.A,{href:"/prompt-registry",children:"prompts"}),", model responses,"," ",(0,a.jsx)(s.A,{href:h.jT+"tracing/",children:"tool calls"}),', retrieval results, token usage, and nested spans showing multi-step reasoning. This structured telemetry allows teams to search for patterns (e.g., "all traces where token usage exceeded 10,000"), debug specific failures, and understand the "why" behind every output.']}),(0,a.jsx)("div",{style:{margin:"40px 0",borderRadius:"8px",overflow:"hidden",border:"1px solid #e5e7eb"},children:(0,a.jsxs)("video",{width:"100%",controls:!0,autoPlay:!0,loop:!0,muted:!0,playsInl
275ine:!0,children:[(0,a.jsx)("source",{src:n(70418).A,type:"video/mp4"}),"Your browser does not support the video tag."]})}),(0,a.jsxs)("div",{style:{margin:"40px 0",textAlign:"center"},children:[(0,a.jsx)("img",{src:p.A,alt:"MLflow Trace UI showing captured LLM calls with prompts, responses, and metadata",style:{width:"100%",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)"}}),(0,a.jsx)("p",{style:{marginTop:"12px",fontSize:"14px",color:"#6b7280",fontStyle:"italic"},children:"An LLM trace showing prompts, completions, token usage, latency, and execution metadata"})]}),(0,a.jsxs)("div",{style:{background:"#f9fafb",border:"1px solid #e5e7eb",borderRadius:"8px",padding:"20px 24px",margin:"40px 0"},children:[(0,a.jsx)("p",{style:{marginBottom:"12px"},children:(0,a.jsx)("strong",{children:"Quick Navigation:"})}),(0,a.jsxs)("ul",{style:{margin:0,paddingLeft:"24px"},children:[(0,a.jsx)("li",{style:{marginBottom:"8px"},children:(0,a.jsx)("a",{href:"#llm-tracing",children:"LLM Tracing"})}),(0,a.jsx)("li",{style:{marginBottom:"8px"},children:(0,a.jsx)("a",{href:"#ai-tracing",children:"AI Tracing"})}),(0,a.jsx)("li",{style:{marginBottom:"8px"},children:(0,a.jsx)("a",{href:"#agent-tracing",children:"Agent Tracing"})}),(0,a.jsx)("li",{style:{marginBottom:"8px"},children:(0,a.jsx)("a",{href:"#how-to-implement",children:"How to Implement"})}),(0,a.jsx)("li",{style:{marginBottom:"0"},children:(0,a.jsx)("a",{href:"#faq",children:"FAQ"})})]})]}),(0,a.jsx)("h2",{children:"Why LLM Tracing Matters"}),(0,a.jsx)("p",{children:"LLM applications introduce unique challenges that traditional logging can't address:"}),(0,a.jsxs)("div",{className:"grid-2",children:[(0,a.jsxs)("div",{className:"card",children:[(0,a.jsx)("h3",{children:"Debugging Non-Determinism"}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Problem:"})," LLMs produce different outputs for the same input. Traditional logs can't capture the full context needed to debug why a specific output was generated."]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Solution:"})," Tracing captures prompts, model parameters, and responses together, making every execution reproducible and debuggable."]})]}),(0,a.jsxs)("div",{className:"card",children:[(0,a.jsx)("h3",{children:"Cost Optimization"}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Problem:"})," Token costs can spiral without visibility into which requests are most expensive and why."]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Solution:"})," ",(0,a.jsx)(s.A,{href:h.jT+"tracing/token-usage-cost/",children:"Track token usage"})," ","per request, identify inefficient prompts, and find opportunities to switch to smaller models without sacrificing quality."]})]}),(0,a.jsxs)("div",{className:"card",children:[(0,a.jsx)("h3",{children:"Quality Assurance"}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Problem:"})," LLMs can produce hallucinations, irrelevant responses, or degraded outputs that undermine user trust."]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Solution:"})," Trace data combined with"," ",(0,a.jsx)(s.A,{href:h.jT+"llm-evaluate/",children:"automated evaluation"})," ","helps detect quality issues before they reach users."]})]}),(0,a.jsxs)("div",{className:"card",children:[(0,a.jsx)("h3",{children:"Production Monitoring"}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Problem:"})," Without tracing, it's impossible to know when LLM behavior changes due to model updates or prompt drift."]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Solution:"})," Continuous tracing provides a baseline for"," ",(0,a.jsx)(s.A,{href:"/ai-observability",children:"detecting regressions"}),", latency spikes, and cost anomalies."]})]})]}),(0,a.jsx)("h2",{id:"llm-tracing",children:"What is LLM Tracing?"}),(0,a.jsx)("p",{children:"LLM tracing captures detailed execution data for every large language model call in your application. Each trace records:"}),(0,a.jsxs)("ul",{children:[(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Prompts:"})," The exact input sent to the model, including system messages, user messages, and few-shot examples."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Completions:"})," The full response generated by the model, including all candidate outputs if using n > 1."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Model Parameters:"})," Temperature, top_p, max_tokens, stop sequences, and other configuration that influences output."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Token Usage:"})," Prompt tokens, completion tokens, and total tokens consumed, enabling"," ",(0,a.jsx)(s.A,{href:h.jT+"tracing/token-usage-cost/",children:"cost tracking"}),"."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Latency:"})," Time to first token, total response time, and server-side processing time."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Metadata:"})," User IDs, session IDs, request IDs, and custom tags for filtering and analysis."]})]}),(0,a.jsx)("p",{children:'This structured data allows teams to search for patterns (e.g., "all traces where latency exceeded 5 seconds"), debug specific failures, and understand cost drivers. Unlike logs, traces are designed to be queried, aggregated, and correlated across millions of requests.'}),(0,a.jsxs)("p",{children:[(0,a.jsx)(s.A,{href:h.jT+"tracing/",children:"MLflow's automatic tracing"})," ","captures all of this telemetry with a single line of code for 50+ LLM providers and frameworks, storing traces locally or sending them to your tracking server for analysis and monitoring."]}),(0,a.jsx)("h2",{id:"ai-tracing",children:"What is AI Tracing?"}),(0,a.jsx)("p",{children:"AI tracing extends LLM tracing to cover the entire AI a
275pplication stack, not just individual model calls. While LLM tracing focuses on capturing prompts and completions, AI tracing captures every component of your AI system:"}),(0,a.jsxs)("ul",{children:[(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Embeddings:"})," Text chunks embedded, embedding models used, vector dimensions, and computation time."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Retrievers:"})," Search queries, retrieved documents, similarity scores, and retrieval latency."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"RAG Pipelines:"})," Document chunking, retrieval, re-ranking, and context assembly steps."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Multi-Model Systems:"})," Chains of different models (e.g., embedding model \u2192 ranking model \u2192 generation model)."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Custom Logic:"})," Business logic, data transformations, and external API calls integrated with LLMs."]})]}),(0,a.jsx)("p",{children:'AI tracing captures these components as a single execution graph, showing how data flows through your entire AI stack. This makes it possible to debug failures that span multiple components (e.g., "the retriever returned irrelevant documents, so the LLM hallucinated") and optimize end-to-end latency and cost.'}),(0,a.jsxs)("p",{children:["With"," ",(0,a.jsx)(s.A,{href:h.jT+"tracing/",children:"MLflow's OpenTelemetry-compatible tracing"}),", you can trace any component of your AI stack, not just LLM calls. Use"," ",(0,a.jsxs)(s.A,{href:h.jT+"tracing/tracing-with-decorators/",children:[(0,a.jsx)("code",{children:"@mlflow.trace"})," decorators"]})," ","to instrument custom functions, or rely on automatic tracing for popular frameworks like"," ",(0,a.jsx)(s.A,{href:"https://mlflow.org/docs/latest/genai/tracing/integrations/listing/langchain.html",children:"LangChain"}),","," ",(0,a.jsx)(s.A,{href:"https://mlflow.org/docs/latest/genai/tracing/integrations/listing/llamaindex.html",children:"LlamaIndex"}),", and"," ",(0,a.jsx)(s.A,{href:"https://mlflow.org/docs/latest/genai/tracing/integrations/listing/langgraph.html",children:"LangGraph"}),"."]}),(0,a.jsx)("h2",{id:"agent-tracing",children:"What is Agent Tracing?"}),(0,a.jsx)("p",{children:"Agent tracing extends AI tracing to multi-step autonomous agents. While LLM tracing tracks individual model calls and AI tracing captures multi-component pipelines, agent tracing reveals the complete decision-making process of agents that reason, plan, and act across multiple turns."}),(0,a.jsx)("p",{children:"Agents built with frameworks like LangGraph, CrewAI, or AutoGen make dynamic decisions: which tools to call, when to retry, how to recover from errors, and when to ask for help. Agent tracing captures this execution graph:"}),(0,a.jsxs)("ul",{children:[(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Reasoning Steps:"})," Internal thoughts, planning, and reflection that guide the agent's actions."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Tool Calls:"})," Which tools were invoked, with what arguments, and what they returned."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Conditional Branches:"})," How the agent chose between different paths based on intermediate results."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Iterative Loops:"})," Retry logic, error handling, and multi-turn interactions with tools or users."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Parallel Execution:"})," Simultaneous tool calls and how results are merged."]})]}),(0,a.jsx)("p",{children:"This visibility is critical for debugging agent failures. When an agent gets stuck in a loop, makes incorrect tool choices, or produces unexpected outputs, agent tracing shows exactly where the reasoning went wrong."}),(0,a.jsxs)("p",{children:[(0,a.jsx)(s.A,{href:h.jT+"eval-monitor/",children:"MLflow automatically traces agent workflows"}),", capturing the full directed acyclic graph (DAG) of execution. You can see every reasoning step, tool call, and decision point, making it easy to identify and fix problematic agent behaviors."]}),(0,a.jsx)("h2",{children:"Common Use Cases for LLM Tracing"}),(0,a.jsx)("p",{children:"LLM tracing solves real-world problems across the AI lifecycle:"}),(0,a.jsxs)("ul",{children:[(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Debugging Hallucinations:"})," When your LLM produces incorrect outputs, tracing shows exactly what prompt was sent, what context was included, and what parameters were used. This makes it easy to identify whether the problem is in prompt construction, retrieval quality, or model behavior."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Optimizing Token Costs:"})," ",(0,a.jsx)(s.A,{href:h.jT+"tracing/token-usage-cost/",children:"Track token usage and costs"})," ","per request to identify expensive queries, inefficient prompts, or opportunities to switch to smaller models. Teams use tracing to reduce LLM costs by 30-50% without sacrificing quality."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Monitoring Production Quality:"})," Continuous tracing combined with"," ",(0,a.jsx)(s.A,{href:h.jT+"llm-evaluate/",children:"automated evaluation"})," ","helps detect when model behavior degrades from API updates, prompt drift, or data changes\u2014before users notice."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"A/B Testing Prompts:"})," Before deploying"," ",(0,a.jsx)(s.A,{href:"/prompt-registry",children:"prompt"})," changes to production, use traced data to run"," ",(0,a.jsx)(s.A,{href:h.jT+"llm-evaluate/",children:"side-by-side evaluations"}),". Compare quality metrics like relevance, factuality, and safety to ensure changes improve output quality."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Understanding Agent Behavior:"})," ",(0,a.jsx)(s.A,{href:h.jT+"eval-monitor/",children:"Agents"})," ","can behave unpredictably\u2014getting stuck in loops, making incorrect tool choices, or producing inconsistent outputs. Agent tracing shows every reasoning step, tool call, and decision point so you can identify and fix problematic patterns."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{children:"Compliance & Auditing:"})," Capture complete audit trails showing what prompts were sent, what responses were received, and what data was accessed."," ",(0,a.jsx)(s.A,{href:h.jT+"guides/responsible-ai/",children:"Enforce PII redaction policies and content guardrails"})," ","to meet regulatory requirements."]})]}),(0,a.jsx)("h2",{id:"how-to-implement",children:"How to Implement LLM Tracing"}),(0,a.jsxs)("p",{children:["Modern open source AI platforms like"," ",(0,a.jsx)(s.A,{href:"/genai",children:"MLflow"})," make it easy to add production-grade LLM tracing with minimal code changes."]}),(0,a.jsx)("p",{children:"With just a single line of code, you can automatically capture traces for every LLM call, including prompts, responses, token usage, latency, and model parameters. These traces are stored locally or sent to your MLflow tracking server, where you can search, filter, and analyze them in the MLflow UI."}),(0,a.jsxs)("p",{children:["Here are quick examples of enabling automatic tracing. Check out the"," ",(0,a.jsx)(s.A,{href:h.jT+"tracing/integrations/",children:"MLflow tracing integrations documentation"})," ","to see how to use tracing with LangChain, LangGraph, LlamaIndex, Vercel AI SDK, and other frameworks."]}),(0,a.jsx)("p",{style:{marginTop:"32px",marginBottom:"0px"},children:(0,a.jsx)("strong",{children:"OpenAI"})}),(0,a.jsxs)("div",{className:"rounded-lg border border-white/10 overflow-hidden",style:{backgroundColor:g.o,margin:"8px 0"},children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-white/10 bg-white/5",children:[(0,a.jsx)("span",{className:"text-xs text-white/50 font-mono",children:"python"}),(0,a.jsx)(m.i,{code:`import mlflow
276
277# Enable automatic tracing for OpenAI
278mlflow.openai.autolog()
279
280# That's it - every LLM call is now traced
281from openai import OpenAI
282client = OpenAI()
283response = client.chat.completions.create(
284    model="gpt-5.2",
285    messages=[{"role": "user", "content": "Hello!"}],
286)`})]}),(0,a.jsx)("div",{className:"p-3 overflow-x-auto",children:(0,a.jsx)(o.f4,{theme:g.AS,code:`import mlflow
287
288# Enable automatic tracing for OpenAI
289mlflow.openai.autolog()
290
291# That's it - every LLM call is now traced
292from openai import OpenAI
293client = OpenAI()
294response = client.chat.completions.create(
295    model="gpt-5.2",
296    messages=[{"role": "user", "content": "Hello!"}],
297)`,language:"python",children:({style:e,tokens:t,getLineProps:n,getTokenProps:i})=>(0,a.jsx)("pre",{className:"text-xs font-mono !m-0 !p-0 text-left",style:{...e,backgroundColor:"transparent"},children:t.map((e,t)=>(0,a.jsx)("div",{...n({line:e}),children:e.map((e,t)=>(0,a.jsx)("span",{...i({token:e})},t))},t))})})})]}),(0,a.jsx)("p",{style:{marginTop:"32px",marginBottom:"0px"},children:(0,a.jsx)("strong",{children:"LangGraph"})}),(0,a.jsxs)("div",{className:"rounded-lg border border-white/10 overflow-hidden",style:{backgroundColor:g.o,margin:"8px 0"},children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-white/10 bg-white/5",children:[(0,a.jsx)("span",{className:"text-xs text-white/50 font-mono",children:"python"}),(0,a.jsx)(m.i,{code:`import mlflow
298
299# Enable automatic tracing for LangChain
300mlflow.langchain.autolog()
301
302from langchain_openai import ChatOpenAI
303from langchain.agents import initialize_agent, AgentType
304
305llm = ChatOpenAI(model="gpt-5.2")
306agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
307agent.run("What is the weather in San Francisco?")`})]}),(0,a.jsx)("div",{className:"p-3 overflow-x-auto",children:(0,a.jsx)(o.f4,{theme:g.AS,code:`import mlflow
308
309# Enable automatic tracing for LangChain
310mlflow.langchain.autolog()
311
312from langchain_openai import ChatOpenAI
313from langchain.agents import initialize_agent, AgentType
314
315llm = ChatOpenAI(model="gpt-5.2")
316agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
317agent.run("What is the weather in San Francisco?")`,language:"python",children:({style:e,tokens:t,getLineProps:n,getTokenProps:i})=>(0,a.jsx)("pre",{className:"text-xs font-mono !m-0 !p-0 text-left",style:{...e,backgroundColor:"transparent"},children:t.map((e,t)=>(0,a.jsx)("div",{...n({line:e}),children:e.map((e,t)=>(0,a.jsx)("span",{...i({token:e})},t))},t))})})})]}),(0,a.jsx)("p",{style:{marginTop:"32px",marginBottom:"0px"},children:(0,a.jsx)("strong",{children:"Vercel AI SDK"})}),(0,a.jsxs)("div",{className:"rounded-lg border border-white/10 overflow-hidden",style:{backgroundColor:g.o,margin:"8px 0"},children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-white/10 bg-white/5",children:[(0,a.jsx)("span",{className:"text-xs text-white/50 font-mono",children:"typescript"}),(0,a.jsx)(m.i,{code:`import { generateText } from 'ai';
318import { openai } from '@ai-sdk/openai';
319
320// Configure OpenTelemetry to send traces to MLflow
321// (see MLflow docs for setup details)
322
323// Enable tracing for each AI SDK call
324const result = await generateText({
325  model: openai('gpt-5.2'),
326  prompt: 'What is MLflow?',
327  experimental_telemetry: { isEnabled: true }
328});`})]}),(0,a.jsx)("div",{className:"p-3 overflow-x-auto",children:(0,a.jsx)(o.f4,{theme:g.AS,code:`import { generateText } from 'ai';
329import { openai } from '@ai-sdk/openai';
330
331// Configure OpenTelemetry to send traces to MLflow
332// (see MLflow docs for setup details)
333
334// Enable tracing for each AI SDK call
335const result = await generateText({
336  model: openai('gpt-5.2'),
337  prompt: 'What is MLflow?',
338  experimental_telemetry: { isEnabled: true }
339});`,language:"typescript",children:({style:e,tokens:t,getLineProps:n,getTokenProps:i})=>(0,a.jsx)("pre",{className:"text-xs font-mono !m-0 !p-0 text-left",style:{...e,backgroundColor:"transparent"},children:t.map((e,t)=>(0,a.jsx)("div",{...n({line:e}),children:e.map((e,t)=>(0,a.jsx)("span",{...i({token:e})},t))},t))})})})]}),(0,a.jsxs)("div",{style:{margin:"40px 0",textAlign:"center"},children:[(0,a.jsx)("img",{src:p.A,alt:"MLflow Trace UI showing captured LLM calls with prompts, responses, and metadata",style:{width:"100%",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)"}}),(0,a.jsx)("p",{style:{marginTop:"12px",fontSize:"14px",color:"#6b7280",fontStyle:"italic"},children:"The MLflow UI automatically captures and displays traces for every LLM call"})]}),(0,a.jsx)("div",{className:"info-box",children:(0,a.jsxs)("p",{children:[(0,a.jsx)(s.A,{href:"/genai",style:{color:"#007bff"},children:(0,a.jsx)("strong",{children:"MLflow"})})," ","is the largest open-source"," ",(0,a.jsx)("strong",{children:"AI engineering platform for agents, LLMs, and ML models"}),", with over 30 million monthly downloads. Thousands of organizations use MLflow to debug, evaluate, monitor, and optimize production-quality AI agents and LLM applications while controlling costs and managing access to models and data. Backed by the Linux Foundation and licensed under Apache 2.0, MLflow provides a complete LLM tracing solution with no vendor lock-in."," ",(0,a.jsx)(s.A,{href:h.jT,children:"Get started \u2192"})]})}),(0,a.jsx)("h2",{children:"Open Source vs. Proprietary LLM Tracing"}),(0,a.jsx)("p",{children:"When choosing an LLM tracing platform, the decision between open source and proprietary SaaS tools has significant long-term implications for your team, infrastru
339cture, and data ownership."}),(0,a.jsxs)("p",{children:[(0,a.jsxs)("strong",{children:["Open Source (",(0,a.jsx)(s.A,{href:"/genai",children:"MLflow"}),"):"]})," ","With MLflow, you maintain complete control over your tracing infrastructure and data. Deploy on your own infrastructure or use managed versions on Databricks, AWS, or other platforms. There are no per-trace fees, no usage limits, and no vendor lock-in. Your trace data stays under your control, and you can customize the platform to your exact needs. MLflow integrates with any LLM provider and agent framework through OpenTelemetry-compatible tracing."]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Proprietary SaaS Tools:"})," Commercial tracing platforms offer convenience but at the cost of flexibility and control. They typically charge per trace volume or per seat, which can become expensive at scale. Your data is sent to their servers, raising privacy and compliance concerns. You're locked into their ecosystem, making it difficult to switch providers or customize functionality. Most proprietary tools only support a subset of LLM providers and frameworks."]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"Why Teams Choose Open Source:"})," Organizations building production LLM applications increasingly choose MLflow because it offers enterprise-grade tracing without compromising on data sovereignty, cost predictability, or flexibility. The Apache 2.0 license and Linux Foundation backing ensure MLflow remains truly open and community-driven, not controlled by a single vendor."]}),(0,a.jsx)("h2",{id:"faq",children:"Frequently Asked Questions"}),(0,a.jsx)("div",{className:"faq-list",children:f.map((n,i)=>(0,a.jsxs)("div",{className:"faq-item",children:[(0,a.jsxs)("button",{className:"faq-question",onClick:()=>t(e===i?null:i),children:[(0,a.jsx)("span",{children:n.question}),(0,a.jsx)("span",{className:`faq-chevron ${e===i?"open":""}`,children:"\u25BC"})]}),e===i&&(0,a.jsx)("div",{className:"faq-answer",children:n.answer})]},i))}),(0,a.jsx)("h2",{children:"Related Resources"}),(0,a.jsxs)("ul",{children:[(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:"/arize-phoenix-alternative",children:"Arize Phoenix Alternative Comparison"})}),(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:"/top-5-agent-observability-tools",children:"Top 5 Agent Observability Tools Comparison"})}),(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:h.jT+"tracing/",children:"MLflow Tracing Documentation"})}),(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:"/ai-observability",children:"AI Observability Guide"})}),(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:h.jT+"eval-monitor/",children:"Agent Evaluation Guide"})}),(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:"/llm-evaluation",children:"Agent Evaluation FAQ"})}),(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:"/ai-monitoring",children:"AI Monitoring FAQ"})}),(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:"/genai",children:"MLflow for Agents and LLMs Overview"})}),(0,a.jsx)("li",{children:(0,a.jsx)(s.A,{href:h.jT,children:"MLflow for Agents and LLMs Documentation"})})]})]}),(0,a.jsx)(d.B,{}),(0,a.jsx)(c.K,{})]})]})}},53440(e,t,n){n.d(t,{GO:()=>o,cn:()=>s,kB:()=>l});var a=n(34164),i=n(50856),r=n(57432);function s(...e){return(0,i.QP)((0,a.$)(e))}function o(e,t,n){return e.startsWith(t)?"/classical-ml#get-started":e.startsWith(n)?({[`${n}`]:r.jT,[`${n}/`]:r.jT,[`${n}/observability`]:`${r.jT}tracing/quickstart/`,[`${n}/evaluations`]:`${r.jT}eval-monitor/quickstart/`,[`${n}/prompt-registry`]:`${r.jT}prompt-registry/create-and-edit-prompts/`,[`${n}/ai-gateway`]:`${r.jT}governance/ai-gateway/setup/`,[`${n}/governance`]:r.jT,[`${n}/human-feedback`]:r.jT})[e]||r.jT:"/#get-started"}function l(e,t){return e.startsWith(t)}},13497(e,t,n){n.d(t,{b:()=>a});function a(){!function({id:e,name:t,value:n=1,currency:a="USD"}){if("u"<typeof window)return;let i={transaction_id:`${e}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`,value:n,currency:a,items:[{item_id:e,item_name:t,quantity:1}]};window.dataLayer=window.dataLayer||[],window.dataLayer.push({ecommerce:null}),window.dataLayer.push({event:"purchase",ecommerce:i}),"function"==typeof window.gtag&&window.gtag("event","purchase",i)}({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.