/ docs / docusaurus.config.ts
docusaurus.config.ts
   1  import { themes as prismThemes } from 'prism-react-renderer';
   2  import type { Config } from '@docusaurus/types';
   3  import type * as Preset from '@docusaurus/preset-classic';
   4  import { postProcessSidebar, apiReferencePrefix } from './docusaurusConfigUtils';
   5  import tailwindPlugin from './src/plugins/tailwind-config.cjs';
   6  
   7  // ensure baseUrl always ends in `/`
   8  const baseUrl = (process.env.DOCS_BASE_URL ?? '/docs/latest/').replace(/\/?$/, '/');
   9  
  10  const config: Config = {
  11    title: 'MLflow AI Platform',
  12    tagline: 'MLflow Documentation',
  13    favicon: 'images/favicon.ico',
  14  
  15    // Docusaurus sets the canonical URL to the preferred one, so the pages are consolidated and double search results are prevented.
  16    trailingSlash: true,
  17    // Versioned builds (e.g. /docs/2.x.x/) are noindexed so only /docs/latest/ appears in search results.
  18    noIndex: process.env.DOCS_NO_INDEX === 'true',
  19  
  20    // Set the production url of your site here
  21    url: 'https://mlflow.org',
  22  
  23    // when building for production, check this environment
  24    // variable to determine the correct base URL
  25    baseUrl: baseUrl,
  26  
  27    // GitHub pages deployment config.
  28    // If you aren't using GitHub pages, you don't need these.
  29    organizationName: 'mlflow', // Usually your GitHub org/user name.
  30    projectName: 'mlflow', // Usually your repo name.
  31  
  32    staticDirectories: ['static'],
  33  
  34    // change to throw when migration is done
  35    onBrokenLinks: 'throw',
  36    onBrokenAnchors: 'throw',
  37    onDuplicateRoutes: 'throw', // Fail build on duplicate redirects
  38  
  39    future: {
  40      v4: true, // opt-in for Docusaurus v4 planned changes
  41      faster: true, // turns Docusaurus Faster on globally
  42    },
  43  
  44    // Even if you don't use internationalization, you can use this field to set
  45    // useful metadata like html lang. For example, if your site is Chinese, you
  46    // may want to replace "en" with "zh-Hans".
  47    i18n: {
  48      defaultLocale: 'en',
  49      locales: ['en'],
  50    },
  51  
  52    // NB: docusaurus does not automatically prepend the
  53    // baseURL to relative paths in script srcs. please
  54    // make sure to append this yourself.
  55    scripts: [
  56      {
  57        // runllm
  58        src: baseUrl + 'js/runllm.js',
  59        defer: true,
  60      },
  61    ],
  62  
  63    themes: ['@docusaurus/theme-mermaid', '@signalwire/docusaurus-theme-llms-txt'],
  64    markdown: {
  65      mermaid: true,
  66      hooks: {
  67        onBrokenMarkdownLinks: 'throw',
  68      },
  69    },
  70  
  71    presets: [
  72      [
  73        'classic',
  74        {
  75          docs: false,
  76          theme: {
  77            customCss: './src/css/custom.css',
  78          },
  79          googleTagManager: {
  80            containerId: process.env.GTM_ID || 'GTM-TEST',
  81          },
  82          gtag: {
  83            trackingID: [process.env.GTM_ID || 'GTM-TEST', 'AW-16857946923'],
  84            anonymizeIP: true,
  85          },
  86        } satisfies Preset.Options,
  87      ],
  88    ],
  89  
  90    clientModules: [require.resolve('./src/docusaurus.theme.js')],
  91  
  92    headTags: [
  93      // Open Graph
  94      {
  95        tagName: 'meta',
  96        attributes: { property: 'og:type', content: 'website' },
  97      },
  98      {
  99        tagName: 'meta',
 100        attributes: { property: 'og:site_name', content: 'MLflow' },
 101      },
 102      {
 103        tagName: 'meta',
 104        attributes: {
 105          property: 'og:title',
 106          content: 'MLflow — Open Source AI Platform for Agents, LLMs & Models',
 107        },
 108      },
 109      {
 110        tagName: 'meta',
 111        attributes: {
 112          property: 'og:description',
 113          content:
 114            'Official MLflow documentation for LLM tracing, agent evaluation, prompt management, experiment tracking, model registry, and beyond.',
 115        },
 116      },
 117      {
 118        tagName: 'meta',
 119        attributes: {
 120          property: 'og:image',
 121          content: 'https://mlflow.org/img/mlflow-card.png',
 122        },
 123      },
 124      // Twitter Card
 125      {
 126        tagName: 'meta',
 127        attributes: { name: 'twitter:card', content: 'summary_large_image' },
 128      },
 129      {
 130        tagName: 'meta',
 131        attributes: {
 132          name: 'twitter:title',
 133          content: 'MLflow — Open Source AI Platform for Agents, LLMs & Models',
 134        },
 135      },
 136      {
 137        tagName: 'meta',
 138        attributes: {
 139          name: 'twitter:description',
 140          content:
 141            'Official MLflow documentation for LLM tracing, agent evaluation, prompt management, experiment tracking, model registry, and beyond.',
 142        },
 143      },
 144      {
 145        tagName: 'meta',
 146        attributes: {
 147          name: 'twitter:image',
 148          content: 'https://mlflow.org/img/mlflow-card.png',
 149        },
 150      },
 151      {
 152        tagName: 'meta',
 153        attributes: { name: 'twitter:site', content: '@mlflow' },
 154      },
 155    ],
 156  
 157    themeConfig: {
 158      docs: {
 159        sidebar: {
 160          autoCollapseCategories: true,
 161        },
 162      },
 163      mermaid: {
 164        theme: { light: 'neutral', dark: 'dark' },
 165        options: {
 166          fontFamily: 'inherit',
 167          fontSize: 16,
 168        },
 169      },
 170      navbar: {
 171        logo: {
 172          alt: 'MLflow Logo',
 173          src: 'images/logo-light.svg',
 174          srcDark: 'images/logo-dark.svg',
 175        },
 176        items: [
 177          {
 178            type: 'custom-docsDropdown',
 179            label: 'Documentation',
 180            items: [
 181              // GenAI docs
 182              {
 183                type: 'docSidebar',
 184                sidebarId: 'genAISidebar',
 185                label: 'LLMs & Agents',
 186                docsPluginId: 'genai',
 187                className: 'genai-docs-link',
 188              },
 189              // Classic ML docs
 190              {
 191                type: 'docSidebar',
 192                sidebarId: 'classicMLSidebar',
 193                label: 'Machine Learning',
 194                docsPluginId: 'classic-ml',
 195                className: 'ml-docs-link',
 196              },
 197            ],
 198          },
 199          {
 200            to: `${apiReferencePrefix()}api_reference/index.html`,
 201            position: 'left',
 202            label: 'API Reference',
 203          },
 204          {
 205            type: 'docSidebar',
 206            position: 'left',
 207            sidebarId: 'selfHostingSidebar',
 208            label: 'Self-Hosting',
 209            docsPluginId: 'self-hosting',
 210          },
 211          {
 212            type: 'docSidebar',
 213            position: 'left',
 214            sidebarId: 'communitySidebar',
 215            label: 'Community',
 216            docsPluginId: 'community',
 217          },
 218          {
 219            type: 'custom-versionSelector',
 220            position: 'right',
 221          },
 222          {
 223            href: 'https://github.com/mlflow/mlflow',
 224            label: 'GitHub',
 225            position: 'right',
 226            className: 'github-link',
 227          },
 228        ],
 229      },
 230      colorMode: {
 231        defaultMode: 'dark',
 232        disableSwitch: false,
 233        respectPrefersColorScheme: true,
 234      },
 235      footer: {
 236        links: [
 237          {
 238            title: 'Community',
 239            items: [
 240              {
 241                label: 'Stack Overflow',
 242                href: 'https://stackoverflow.com/questions/tagged/mlflow',
 243              },
 244              {
 245                label: 'LinkedIn',
 246                href: 'https://www.linkedin.com/company/mlflow-org',
 247              },
 248              {
 249                label: 'X',
 250                href: 'https://x.com/mlflow',
 251              },
 252            ],
 253          },
 254          {
 255            title: 'Resources',
 256            items: [
 257              {
 258                label: 'Docs',
 259                to: '/',
 260              },
 261              {
 262                label: 'Releases',
 263                to: 'https://mlflow.org/releases',
 264              },
 265              {
 266                label: 'Blog',
 267                to: 'https://mlflow.org/blog',
 268              },
 269            ],
 270          },
 271        ],
 272        copyright: `Copyright © ${new Date().getFullYear()} MLflow Project, a Series of LF Projects, LLC.`,
 273      },
 274      prism: {
 275        // There is an array of languages enabled by default.
 276        // @see https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/generate-prism-languages/index.ts#L9-L26
 277        additionalLanguages: ['bash', 'diff', 'ini', 'java', 'nginx', 'r', 'scala', 'sql', 'toml'],
 278        theme: prismThemes.github,
 279        darkTheme: prismThemes.dracula,
 280      },
 281      algolia: {
 282        // The application ID provided by Algolia
 283        appId: 'XKVLO8P882',
 284  
 285        // Public API key: it is safe to commit it
 286        apiKey: 'e78ac2f60eba60a4c4a353c0702cc7bb',
 287  
 288        indexName: 'd1voxqa8i8phxc-cloudfront',
 289  
 290        // Optional: see doc section below
 291        contextualSearch: true,
 292  
 293        // Optional: Specify domains where the navigation should occur through window.location instead on history.push.
 294        // Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.
 295        externalUrlRegex: '/api_reference',
 296      },
 297    } satisfies Preset.ThemeConfig,
 298  
 299    plugins: [
 300      tailwindPlugin,
 301      [
 302        '@signalwire/docusaurus-plugin-llms-txt',
 303        {
 304          ui: {
 305            copyPageContent: {
 306              buttonLabel: 'Copy Page',
 307              display: {
 308                docs: true,
 309              },
 310            },
 311          },
 312        },
 313      ],
 314      // Classic ML docs plugin
 315      [
 316        '@docusaurus/plugin-content-docs',
 317        {
 318          id: 'classic-ml',
 319          path: 'docs/classic-ml',
 320          routeBasePath: 'ml',
 321          sidebarPath: './sidebarsClassicML.ts',
 322          async sidebarItemsGenerator({ defaultSidebarItemsGenerator, ...args }) {
 323            const sidebarItems = await defaultSidebarItemsGenerator(args);
 324            return postProcessSidebar(sidebarItems);
 325          },
 326        },
 327      ],
 328      // GenAI docs plugin
 329      [
 330        '@docusaurus/plugin-content-docs',
 331        {
 332          id: 'genai',
 333          path: 'docs/genai',
 334          routeBasePath: 'genai',
 335          sidebarPath: './sidebarsGenAI.ts',
 336          async sidebarItemsGenerator({ defaultSidebarItemsGenerator, ...args }) {
 337            const sidebarItems = await defaultSidebarItemsGenerator(args);
 338            return postProcessSidebar(sidebarItems);
 339          },
 340        },
 341      ],
 342      // Community docs plugin
 343      [
 344        '@docusaurus/plugin-content-docs',
 345        {
 346          id: 'community',
 347          path: 'docs/community',
 348          routeBasePath: 'community',
 349          sidebarPath: './communitySidebar.ts',
 350        },
 351      ],
 352      // Self Hosting docs plugin
 353      [
 354        '@docusaurus/plugin-content-docs',
 355        {
 356          id: 'self-hosting',
 357          path: 'docs/self-hosting',
 358          routeBasePath: 'self-hosting',
 359          sidebarPath: './sidebarsSelfHosting.ts',
 360        },
 361      ],
 362      [
 363        '@docusaurus/plugin-client-redirects',
 364        {
 365          redirects: [
 366            {
 367              to: '/',
 368              from: ['/new-features'],
 369            },
 370            // Redirect webhooks from classic-ml to self-hosting
 371            {
 372              to: '/self-hosting/webhooks',
 373              from: ['/ml/webhooks'],
 374            },
 375            // Redirect to the new self-hosting guide
 376            {
 377              to: '/self-hosting/architecture/tracking-server',
 378              from: ['/ml/tracking/server', '/tracking/server'],
 379            },
 380            {
 381              to: '/self-hosting/architecture/artifact-store',
 382              from: ['/ml/tracking/artifact-stores', '/tracking/artifact-stores'],
 383            },
 384            {
 385              to: '/self-hosting/architecture/backend-store',
 386              from: ['/ml/tracking/backend-stores', '/tracking/backend-stores'],
 387            },
 388            {
 389              to: '/self-hosting/security/basic-http-auth',
 390              from: ['/ml/auth'],
 391            },
 392            // Redirect mlflow 3 pages to migration guide
 393            {
 394              to: '/ml/mlflow-3',
 395              from: [
 396                '/mlflow-3',
 397                '/genai/mlflow-3',
 398                '/genai/mlflow-3/deep-learning',
 399                '/mlflow-3/deep-learning',
 400                '/genai/mlflow-3/genai-agent',
 401                '/mlflow-3/genai-agent',
 402                '/genai/mlflow-3/breaking-changes',
 403                '/mlflow-3/breaking-changes',
 404                '/genai/mlflow-3/faqs',
 405                '/mlflow-3/faqs',
 406              ],
 407            },
 408            {
 409              to: '/genai/getting-started/databricks-trial',
 410              from: [
 411                '/getting-started/databricks-trial',
 412                '/getting-started/community-edition',
 413                '/ml/getting-started/databricks-trial',
 414              ],
 415            },
 416            {
 417              to: '/genai/tracing/quickstart',
 418              from: ['/genai/getting-started'],
 419            },
 420            // Redirect deleted data-model pages to GenAI main page
 421            {
 422              to: '/genai',
 423              from: [
 424                '/genai/data-model',
 425                '/genai/data-model/index',
 426                '/genai/data-model/app-versions',
 427                '/genai/data-model/experiments',
 428                '/genai/data-model/logged-model',
 429                '/genai/data-model/model-registry',
 430                '/genai/data-model/prompts',
 431                '/genai/data-model/runs',
 432                '/genai/data-model/traces',
 433              ],
 434            },
 435            // Redirect moved concepts pages from tracing to top-level
 436            {
 437              to: '/genai/concepts/feedback',
 438              from: ['/genai/tracing/concepts/feedback'],
 439            },
 440            {
 441              to: '/genai/concepts/expectations',
 442              from: ['/genai/tracing/concepts/expectations'],
 443            },
 444            {
 445              to: '/genai/concepts/span',
 446              from: ['/genai/tracing/concepts/span'],
 447            },
 448            {
 449              to: '/genai/concepts/trace',
 450              from: ['/genai/tracing/concepts/trace'],
 451            },
 452            // GenAI/LLM Related Redirects
 453            {
 454              to: '/genai/tracing',
 455              from: ['/llms/llm-tracking', '/tracing', '/llms/tracing', '/tracing/api/how-to'],
 456            },
 457            {
 458              to: '/genai/tracing/quickstart',
 459              from: [
 460                '/genai/tracing/quickstart/typescript-openai',
 461                '/genai/tracing/quickstart/python-openai',
 462                '/genai/tracing/app-instrumentation/typescript-sdk',
 463                '/genai/tracing/app-instrumentation',
 464                '/tracing/api',
 465              ],
 466            },
 467            {
 468              to: '/genai/tracing/faq',
 469              from: ['/tracing/faq'],
 470            },
 471            {
 472              to: '/genai/concepts/trace',
 473              from: ['/tracing/tracing-schema', '/llms/tracing/tracing-schema'],
 474            },
 475            {
 476              to: '/genai/tracing/prod-tracing',
 477              from: ['/tracing/production'],
 478            },
 479            {
 480              to: '/genai/tracing/search-traces',
 481              from: ['/tracing/api/search', '/llms/tracing/search-traces'],
 482            },
 483            {
 484              to: '/genai/tracing/app-instrumentation/manual-tracing',
 485              from: ['/tracing/api/client'],
 486            },
 487            {
 488              to: '/genai/tracing/app-instrumentation/manual-tracing',
 489              from: ['/tracing/api/manual-instrumentation'],
 490            },
 491            {
 492              to: '/genai/tracing/search-traces',
 493              from: ['/tracing/ui'],
 494            },
 495            {
 496              to: '/genai/tracing/search-traces',
 497              from: [
 498                '/genai/tracing/observe-with-traces',
 499                '/genai/tracing/observe-with-traces/index',
 500                '/genai/tracing/observe-with-traces/query-via-sdk',
 501              ],
 502            },
 503            {
 504              to: '/genai/tracing/integrations',
 505              from: ['/tracing/integrations'],
 506            },
 507            {
 508              to: '/genai/tracing/integrations/contribute',
 509              from: ['/tracing/integrations/contribute', '/llms/tracing/contribute'],
 510            },
 511            {
 512              to: '/genai/tracing/integrations/listing/anthropic',
 513              from: ['/tracing/integrations/anthropic'],
 514            },
 515            {
 516              to: '/genai/tracing/integrations/listing/autogen',
 517              from: ['/tracing/integrations/autogen'],
 518            },
 519            {
 520              to: '/genai/tracing/integrations/listing/bedrock',
 521              from: ['/tracing/integrations/bedrock', '/llms/bedrock/autologging'],
 522            },
 523            {
 524              to: '/genai/tracing/integrations/listing/crewai',
 525              from: ['/tracing/integrations/crewai'],
 526            },
 527            {
 528              to: '/genai/tracing/integrations/listing/deepseek',
 529              from: ['/tracing/integrations/deepseek'],
 530            },
 531            {
 532              to: '/genai/tracing/integrations/listing/dspy',
 533              from: ['/tracing/integrations/dspy'],
 534            },
 535            {
 536              to: '/genai/tracing/integrations/listing/gemini',
 537              from: ['/tracing/integrations/gemini'],
 538            },
 539            {
 540              to: '/genai/tracing/integrations/listing/groq',
 541              from: ['/tracing/integrations/groq'],
 542            },
 543            {
 544              to: '/genai/tracing/integrations/listing/instructor',
 545              from: ['/tracing/integrations/instructor'],
 546            },
 547            {
 548              to: '/genai/tracing/integrations/listing/langchain',
 549              from: ['/tracing/integrations/langchain'],
 550            },
 551            {
 552              to: '/genai/tracing/integrations/listing/langgraph',
 553              from: ['/tracing/integrations/langgraph'],
 554            },
 555            {
 556              to: '/genai/tracing/integrations/listing/litellm',
 557              from: ['/tracing/integrations/litellm'],
 558            },
 559            {
 560              to: '/genai/tracing/integrations/listing/llama_index',
 561              from: ['/tracing/integrations/llama_index'],
 562            },
 563            {
 564              to: '/genai/tracing/integrations/listing/mistral',
 565              from: ['/tracing/integrations/mistral'],
 566            },
 567            {
 568              to: '/genai/tracing/integrations/listing/ollama',
 569              from: ['/tracing/integrations/ollama'],
 570            },
 571            {
 572              to: '/genai/tracing/integrations/listing/openai',
 573              from: ['/tracing/integrations/openai'],
 574            },
 575            {
 576              to: '/genai/tracing/integrations/listing/openai-agent',
 577              from: ['/tracing/integrations/openai-agent'],
 578            },
 579            {
 580              to: '/genai/tracing/integrations/listing/txtai',
 581              from: ['/tracing/integrations/txtai'],
 582            },
 583            {
 584              to: '/genai',
 585              from: ['/tracing/tutorials/jupyter-trace-demo', '/llms/tracing/notebooks/jupyter-trace-demo'],
 586            },
 587            {
 588              to: '/genai',
 589              from: ['/tracing/tutorials'],
 590            },
 591            {
 592              to: '/genai/eval-monitor/scorers/llm-judge/custom-judges/',
 593              from: [
 594                '/genai/eval-monitor/scorers/llm-judge/make-judge/',
 595                '/genai/eval-monitor/scorers/llm-judge/agentic-overview/',
 596              ],
 597            },
 598  
 599            // Tracing Redirects
 600            {
 601              to: '/genai/concepts/trace',
 602              from: ['/genai/tracing/data-model', '/genai/tracing/trace-instrumentation'],
 603            },
 604            // LLM Flavors Redirects
 605            {
 606              to: '/genai',
 607              from: [
 608                '/llms/rag',
 609                '/llms/rag/notebooks',
 610                '/llms/rag/notebooks/mlflow-e2e-evaluation',
 611                '/llms/rag/notebooks/question-generation-retrieval-evaluation',
 612                '/llms/rag/notebooks/retriever-evaluation-tutorial',
 613              ],
 614            },
 615            {
 616              to: '/genai',
 617              from: ['/llms', '/llms/index'],
 618            },
 619            {
 620              to: '/genai/flavors/chat-model-guide',
 621              from: ['/llms/chat-model-guide'],
 622            },
 623            {
 624              to: '/genai/flavors/chat-model-guide/chat-model-tool-calling',
 625              from: ['/llms/notebooks/chat-model-tool-calling'],
 626            },
 627            {
 628              to: '/genai/flavors/chat-model-intro',
 629              from: ['/llms/chat-model-intro'],
 630            },
 631            {
 632              to: '/genai/flavors/custom-pyfunc-for-llms',
 633              from: ['/llms/custom-pyfunc-for-llms', '/llms/custom-pyfunc-for-llms/notebooks'],
 634            },
 635            {
 636              to: '/genai/flavors/custom-pyfunc-for-llms/notebooks/custom-pyfunc-advanced-llm',
 637              from: ['/llms/custom-pyfunc-for-llms/notebooks/custom-pyfunc-advanced-llm'],
 638            },
 639            {
 640              to: '/genai/flavors/dspy',
 641              from: ['/llms/dspy'],
 642            },
 643            {
 644              to: '/genai/flavors/dspy/notebooks/dspy_quickstart',
 645              from: ['/llms/dspy/notebooks/dspy_quickstart'],
 646            },
 647            {
 648              to: '/genai/flavors/dspy/optimizer',
 649              from: ['/llms/dspy/optimizer'],
 650            },
 651            {
 652              to: '/genai/flavors/langchain',
 653              from: ['/llms/langchain'],
 654            },
 655            {
 656              to: '/genai/flavors/langchain/autologging',
 657              from: ['/llms/langchain/autologging'],
 658            },
 659            {
 660              to: '/genai/flavors/langchain/guide',
 661              from: ['/llms/langchain/guide'],
 662            },
 663            {
 664              to: '/genai/flavors/langchain/notebooks/langchain-quickstart',
 665              from: ['/llms/langchain/notebooks/langchain-quickstart'],
 666            },
 667            {
 668              to: '/genai/flavors/langchain/notebooks/langchain-retriever',
 669              from: ['/llms/langchain/notebooks/langchain-retriever'],
 670            },
 671            {
 672              to: '/genai/flavors/llama-index',
 673              from: ['/llms/llama-index'],
 674            },
 675            {
 676              to: '/genai/flavors/llama-index/notebooks/llama_index_quickstart',
 677              from: ['/llms/llama-index/notebooks/llama_index_quickstart'],
 678            },
 679            {
 680              to: '/genai/flavors/llama-index/notebooks/llama_index_workflow_tutorial',
 681              from: ['/llms/llama-index/notebooks/llama_index_workflow_tutorial'],
 682            },
 683            // Redirect deprecated OpenAI model logging pages to prompt registry
 684            {
 685              to: '/genai/prompt-registry',
 686              from: [
 687                '/llms/openai',
 688                '/llms/openai/guide',
 689                '/llms/openai/guide/index',
 690                '/llms/openai/autologging',
 691                '/llms/openai/autologging/index',
 692                '/llms/openai/notebooks',
 693                '/llms/openai/notebooks/index',
 694                '/llms/openai/notebooks/openai-quickstart-ipynb',
 695                '/llms/openai/notebooks/openai-chat-completions-ipynb',
 696                '/genai/flavors/openai',
 697                '/genai/flavors/openai/index',
 698                '/genai/flavors/openai/guide',
 699                '/genai/flavors/openai/guide/index',
 700                '/genai/flavors/openai/autologging',
 701                '/genai/flavors/openai/autologging/index',
 702                '/genai/flavors/openai/notebooks',
 703                '/genai/flavors/openai/notebooks/index',
 704                '/genai/flavors/openai/notebooks/openai-quickstart-ipynb',
 705                '/genai/flavors/openai/notebooks/openai-chat-completions-ipynb',
 706                '/genai/flavors/openai/notebooks/openai-code-helper-ipynb',
 707                '/genai/flavors/openai/notebooks/openai-embeddings-generation-ipynb',
 708              ],
 709            },
 710  
 711            // Evaluation and Monitoring Redirects
 712            {
 713              to: '/genai/eval-monitor',
 714              from: ['/llms/llm-evaluate'],
 715            },
 716            {
 717              to: '/genai/eval-monitor',
 718              from: [
 719                '/llms/llm-evaluate/notebooks',
 720                '/llms/llm-evaluate/notebooks/huggingface-evaluation',
 721                '/llms/llm-evaluate/notebooks/question-answering-evaluation',
 722                '/llms/llm-evaluate/notebooks/rag-evaluation',
 723                '/llms/llm-evaluate/notebooks/rag-evaluation-llama2',
 724              ],
 725            },
 726            {
 727              to: '/genai/eval-monitor/scorers/llm-judge/custom-judges',
 728              from: [
 729                '/genai/eval-monitor/scorers/llm-judge/trace-analysis',
 730                '/genai/eval-monitor/scorers/llm-judge/agent-behavior-patterns',
 731              ],
 732            },
 733            {
 734              to: '/genai/datasets',
 735              from: ['/genai/eval-monitor/scorers/llm-judge/dataset'],
 736            },
 737            // Classic ML Evaluation Redirects - consolidated to single page
 738            {
 739              to: '/ml/evaluation',
 740              from: [
 741                '/ml/evaluation/model-eval',
 742                '/ml/evaluation/dataset-eval',
 743                '/ml/evaluation/function-eval',
 744                '/ml/evaluation/metrics-visualizations',
 745                '/ml/evaluation/shap',
 746                '/ml/evaluation/plugin-evaluators',
 747              ],
 748            },
 749            // Prompt Management Redirects
 750            {
 751              to: '/genai/prompt-registry/prompt-engineering',
 752              from: ['/llms/prompt-engineering', '/genai/prompt-version-mgmt/prompt-engineering'],
 753            },
 754            {
 755              to: '/genai/prompt-registry',
 756              from: ['/prompts', '/genai/prompt-version-mgmt/prompt-registry'],
 757            },
 758            {
 759              to: '/genai/prompt-registry/manage-prompt-lifecycles-with-aliases',
 760              from: ['/prompts/cm', '/genai/prompt-version-mgmt/prompt-registry/manage-prompt-lifecycles-with-aliases'],
 761            },
 762            {
 763              to: '/genai/prompt-registry/evaluate-prompts',
 764              from: ['/prompts/evaluate', '/genai/prompt-version-mgmt/prompt-registry/evaluate-prompts'],
 765            },
 766            {
 767              to: '/genai/prompt-registry/log-with-model',
 768              from: ['/prompts/run-and-model', '/genai/prompt-version-mgmt/prompt-registry/log-with-model'],
 769            },
 770            {
 771              to: '/genai/prompt-registry/optimize-prompts',
 772              from: [
 773                '/genai/prompt-version-mgmt/optimize-prompts',
 774                '/genai/prompt-version-mgmt/prompt-registry/optimize-prompts',
 775              ],
 776            },
 777            {
 778              to: '/genai/prompt-registry/create-and-edit-prompts',
 779              from: ['/genai/prompt-version-mgmt/prompt-registry/create-and-edit-prompts'],
 780            },
 781            {
 782              to: '/genai/prompt-registry/use-prompts-in-apps',
 783              from: ['/genai/prompt-version-mgmt/prompt-registry/use-prompts-in-apps'],
 784            },
 785            {
 786              to: '/genai/prompt-registry/structured-output',
 787              from: ['/genai/prompt-version-mgmt/prompt-registry/structured-output'],
 788            },
 789            {
 790              to: '/genai/version-tracking',
 791              from: ['/genai/prompt-version-mgmt/version-tracking'],
 792            },
 793            {
 794              to: '/genai/version-tracking/quickstart',
 795              from: ['/genai/prompt-version-mgmt/version-tracking/quickstart'],
 796            },
 797            {
 798              to: '/genai/version-tracking/track-application-versions-with-mlflow',
 799              from: ['/genai/prompt-version-mgmt/version-tracking/track-application-versions-with-mlflow'],
 800            },
 801            {
 802              to: '/genai/version-tracking/compare-app-versions',
 803              from: ['/genai/prompt-version-mgmt/version-tracking/compare-app-versions'],
 804            },
 805  
 806            // ResponsesAgent Redirects
 807            {
 808              to: '/genai/flavors/responses-agent-intro',
 809              from: ['/llms/responses-agent-intro'],
 810            },
 811  
 812            // Governance and Deployments Redirects
 813            {
 814              to: '/genai/governance/ai-gateway',
 815              from: [
 816                '/llms/deployments/',
 817                '/llms/gateway/index',
 818                '/llms/gateway',
 819                '/llms/deployments/guides',
 820                '/llms/gateway/guides/index',
 821                '/llms/gateway/guide',
 822                '/genai/governance/ai-gateway/guides',
 823              ],
 824            },
 825            {
 826              to: '/genai/governance/ai-gateway',
 827              from: [
 828                '/llms/deployments/guides/step1-create-deployments',
 829                '/llms/gateway/guides/step1-create-gateway',
 830                '/genai/governance/ai-gateway/guides/step1-create-deployments',
 831              ],
 832            },
 833            {
 834              to: '/genai/governance/ai-gateway/quickstart',
 835              from: ['/genai/governance/ai-gateway/setup'],
 836            },
 837            {
 838              to: '/genai/governance/ai-gateway',
 839              from: [
 840                '/llms/deployments/guides/step2-query-deployments',
 841                '/llms/gateway/guides/step2-query-gateway',
 842                '/genai/governance/ai-gateway/guides/step2-query-deployments',
 843                '/genai/governance/ai-gateway/usage',
 844              ],
 845            },
 846            {
 847              to: '/genai/governance/ai-gateway',
 848              from: [
 849                '/genai/governance/ai-gateway/legacy',
 850                '/genai/governance/ai-gateway/legacy/index',
 851                '/genai/governance/ai-gateway/legacy/setup',
 852                '/genai/governance/ai-gateway/legacy/configuration',
 853                '/genai/governance/ai-gateway/legacy/usage',
 854              ],
 855            },
 856            {
 857              to: '/genai/governance/ai-gateway',
 858              from: [
 859                '/llms/deployments/uc_integration',
 860                '/genai/governance/unity-catalog',
 861                '/genai/governance/ai-gateway/integration',
 862              ],
 863            },
 864  
 865            // Traditional ML and Core MLflow Redirects
 866            {
 867              to: '/ml',
 868              from: ['/introduction'],
 869            },
 870            {
 871              to: '/self-hosting/security/basic-http-auth',
 872              from: ['/auth'],
 873            },
 874            {
 875              to: '/ml/community-model-flavors',
 876              from: ['/community-model-flavors'],
 877            },
 878            {
 879              to: '/ml/dataset',
 880              from: ['/dataset', '/tracking/data-api/index', '/tracking/data-api'],
 881            },
 882            {
 883              to: '/ml/deep-learning',
 884              from: ['/deep-learning'],
 885            },
 886            {
 887              to: '/ml/deep-learning/keras',
 888              from: ['/deep-learning/keras'],
 889            },
 890            {
 891              to: '/ml/deep-learning/keras',
 892              from: ['/deep-learning/keras/quickstart/quickstart_keras'],
 893            },
 894            {
 895              to: '/ml/deep-learning/keras',
 896              from: ['/deep-learning/keras/guide', '/ml/deep-learning/keras/guide'],
 897            },
 898            {
 899              to: '/ml/deep-learning/pytorch',
 900              from: ['/deep-learning/pytorch'],
 901            },
 902            // Redirect consolidated pytorch guide and quickstart to index
 903            {
 904              to: '/ml/deep-learning/pytorch',
 905              from: [
 906                '/deep-learning/pytorch/guide',
 907                '/ml/deep-learning/pytorch/guide',
 908                '/deep-learning/pytorch/quickstart/pytorch_quickstart',
 909                '/ml/deep-learning/pytorch/quickstart/quickstart-pytorch',
 910              ],
 911            },
 912            // Redirect consolidated spaCy guide to index
 913            {
 914              to: '/ml/deep-learning/spacy',
 915              from: [
 916                '/deep-learning/spacy/guide',
 917                '/classic-ml/deep-learning/spacy/guide',
 918                '/ml/deep-learning/spacy/guide',
 919              ],
 920            },
 921            {
 922              to: '/ml/deep-learning/sentence-transformers',
 923              from: ['/llms/sentence-transformers'],
 924            },
 925            {
 926              to: '/ml/deep-learning/sentence-transformers',
 927              from: ['/llms/sentence-transformers/tutorials', '/ml/deep-learning/sentence-transformers/tutorials'],
 928            },
 929            {
 930              to: '/ml/deep-learning/sentence-transformers/tutorials/paraphrase-mining/paraphrase-mining-sentence-transformers',
 931              from: ['/llms/sentence-transformers/tutorials/paraphrase-mining/paraphrase-mining-sentence-transformers'],
 932            },
 933            {
 934              to: '/ml/deep-learning/sentence-transformers/tutorials/quickstart/sentence-transformers-quickstart',
 935              from: ['/llms/sentence-transformers/tutorials/quickstart/sentence-transformers-quickstart'],
 936            },
 937            {
 938              to: '/ml/deep-learning/sentence-transformers/tutorials/semantic-search/semantic-search-sentence-transformers',
 939              from: ['/llms/sentence-transformers/tutorials/semantic-search/semantic-search-sentence-transformers'],
 940            },
 941            {
 942              to: '/ml/deep-learning/sentence-transformers/tutorials/semantic-similarity/semantic-similarity-sentence-transformers',
 943              from: [
 944                '/llms/sentence-transformers/tutorials/semantic-similarity/semantic-similarity-sentence-transformers',
 945              ],
 946            },
 947            {
 948              to: '/ml/deep-learning/sentence-transformers',
 949              from: ['/llms/sentence-transformers/guide', '/ml/deep-learning/sentence-transformers/guide'],
 950            },
 951            {
 952              to: '/ml/deep-learning/tensorflow',
 953              from: ['/deep-learning/tensorflow'],
 954            },
 955            // Redirect consolidated tensorflow guide and quickstart to index
 956            {
 957              to: '/ml/deep-learning/tensorflow',
 958              from: [
 959                '/deep-learning/tensorflow/guide',
 960                '/ml/deep-learning/tensorflow/guide',
 961                '/deep-learning/tensorflow/quickstart/quickstart_tensorflow',
 962                '/ml/deep-learning/tensorflow/quickstart/quickstart-tensorflow',
 963              ],
 964            },
 965            {
 966              to: '/ml/deep-learning/transformers',
 967              from: ['/llms/transformers'],
 968            },
 969            {
 970              to: '/ml/deep-learning/transformers/guide',
 971              from: ['/llms/transformers/guide'],
 972            },
 973            {
 974              to: '/ml/deep-learning/transformers/large-models',
 975              from: ['/llms/transformers/large-models'],
 976            },
 977            {
 978              to: '/ml/deep-learning/transformers/task',
 979              from: ['/llms/transformers/task'],
 980            },
 981            {
 982              to: '/ml/deep-learning/transformers/tutorials',
 983              from: ['/llms/transformers/tutorials'],
 984            },
 985            {
 986              to: '/ml/deep-learning/transformers/tutorials/audio-transcription/whisper',
 987              from: ['/llms/transformers/tutorials/audio-transcription/whisper'],
 988            },
 989            {
 990              to: '/ml/deep-learning/transformers/tutorials/conversational/conversational-model',
 991              from: ['/llms/transformers/tutorials/conversational/conversational-model'],
 992            },
 993            {
 994              to: '/ml/deep-learning/transformers/tutorials/conversational/pyfunc-chat-model',
 995              from: ['/llms/transformers/tutorials/conversational/pyfunc-chat-model'],
 996            },
 997            {
 998              to: '/ml/deep-learning/transformers/tutorials/fine-tuning/transformers-fine-tuning',
 999              from: ['/llms/transformers/tutorials/fine-tuning/transformers-fine-tuning'],
1000            },
1001            {
1002              to: '/ml/deep-learning/transformers/tutorials/fine-tuning/transformers-peft',
1003              from: ['/llms/transformers/tutorials/fine-tuning/transformers-peft'],
1004            },
1005            {
1006              to: '/ml/deep-learning/transformers/tutorials/prompt-templating/prompt-templating',
1007              from: ['/llms/transformers/tutorials/prompt-templating/prompt-templating'],
1008            },
1009            {
1010              to: '/ml/deep-learning/transformers/tutorials/text-generation/text-generation',
1011              from: ['/llms/transformers/tutorials/text-generation/text-generation'],
1012            },
1013            {
1014              to: '/ml/deep-learning/transformers/tutorials/translation/component-translation',
1015              from: ['/llms/transformers/tutorials/translation/component-translation'],
1016            },
1017            {
1018              to: '/ml/deployment',
1019              from: ['/deployment'],
1020            },
1021            {
1022              to: '/ml/deployment/deploy-model-locally',
1023              from: ['/deployment/deploy-model-locally'],
1024            },
1025            {
1026              to: '/ml/deployment/deploy-model-to-kubernetes',
1027              from: ['/deployment/deploy-model-to-kubernetes'],
1028            },
1029            {
1030              to: '/ml/deployment/deploy-model-to-kubernetes/tutorial',
1031              from: ['/deployment/deploy-model-to-kubernetes/tutorial'],
1032            },
1033            {
1034              to: '/ml/deployment/deploy-model-to-sagemaker',
1035              from: ['/deployment/deploy-model-to-sagemaker'],
1036            },
1037            {
1038              to: '/ml/docker',
1039              from: ['/docker'],
1040            },
1041            {
1042              to: '/ml/evaluation',
1043              from: ['/model-evaluation'],
1044            },
1045            {
1046              to: '/ml/getting-started',
1047              from: ['/getting-started'],
1048            },
1049            {
1050              to: '/ml/getting-started/hyperparameter-tuning',
1051              from: ['/getting-started/quickstart-2'],
1052            },
1053            {
1054              to: '/ml/getting-started',
1055              from: [
1056                '/getting-started/logging-first-model',
1057                '/getting-started/logging-first-model/notebooks',
1058                '/getting-started/logging-first-model/notebooks/logging-first-model',
1059                '/getting-started/logging-first-model/step1-tracking-server',
1060                '/getting-started/logging-first-model/step2-mlflow-client',
1061                '/getting-started/logging-first-model/step3-create-experiment',
1062                '/getting-started/logging-first-model/step4-experiment-search',
1063                '/getting-started/logging-first-model/step5-synthetic-data',
1064                '/getting-started/logging-first-model/step6-logging-a-run',
1065                '/getting-started/registering-first-model',
1066                '/getting-started/registering-first-model/step1-register-model',
1067                '/getting-started/registering-first-model/step2-explore-registered-model',
1068                '/getting-started/registering-first-model/step3-load-model',
1069                '/getting-started/running-notebooks',
1070                '/getting-started/tracking-server-overview',
1071                '/getting-started/tracking-server-overview/notebooks',
1072                '/getting-started/tracking-server-overview/notebooks/tracking-server-overview',
1073                '/getting-started/tracking-server-overview/step1-tracking-server',
1074                // /ml redirects
1075                '/ml/getting-started/logging-first-model',
1076                '/ml/getting-started/logging-first-model/notebooks',
1077                '/ml/getting-started/logging-first-model/notebooks/logging-first-model',
1078                '/ml/getting-started/logging-first-model/step1-tracking-server',
1079                '/ml/getting-started/logging-first-model/step2-mlflow-client',
1080                '/ml/getting-started/logging-first-model/step3-create-experiment',
1081                '/ml/getting-started/logging-first-model/step4-experiment-search',
1082                '/ml/getting-started/logging-first-model/step5-synthetic-data',
1083                '/ml/getting-started/logging-first-model/step6-logging-a-run',
1084                '/ml/getting-started/registering-first-model',
1085                '/ml/getting-started/registering-first-model/step1-register-model',
1086                '/ml/getting-started/registering-first-model/step2-explore-registered-model',
1087                '/ml/getting-started/registering-first-model/step3-load-model',
1088                '/ml/getting-started/tracking-server-overview',
1089              ],
1090            },
1091            {
1092              to: '/ml/model-registry',
1093              from: ['/model-registry', '/registry'],
1094            },
1095            {
1096              to: '/ml/model',
1097              from: ['/model', '/models'],
1098            },
1099            {
1100              to: '/ml/model/dependencies',
1101              from: ['/model/dependencies'],
1102            },
1103            {
1104              to: '/ml/model/models-from-code',
1105              from: ['/model/models-from-code'],
1106            },
1107            {
1108              to: '/ml/model/notebooks/signature_examples',
1109              from: ['/model/notebooks/signature_examples'],
1110            },
1111            {
1112              to: '/ml/model/python_model',
1113              from: ['/model/python_model'],
1114            },
1115            {
1116              to: '/ml/model/signatures',
1117              from: ['/model/signatures'],
1118            },
1119            {
1120              to: '/ml/plugins',
1121              from: ['/plugins'],
1122            },
1123            {
1124              to: '/ml/projects',
1125              from: ['/projects'],
1126            },
1127            {
1128              to: '/ml/search/search-experiments',
1129              from: ['/search-experiments'],
1130            },
1131            {
1132              to: '/ml/search/search-runs',
1133              from: ['/search-runs'],
1134            },
1135            {
1136              to: '/ml/tracking',
1137              from: ['/tracking'],
1138            },
1139            {
1140              to: '/ml/tracking/autolog',
1141              from: ['/tracking/autolog'],
1142            },
1143            {
1144              to: '/ml/tracking/quickstart',
1145              from: [
1146                '/getting-started/intro-quickstart',
1147                '/getting-started/intro-quickstart/notebooks',
1148                '/quickstart_drilldown',
1149                '/getting-started/intro-quickstart/notebooks/tracking_quickstart',
1150                '/ml/tracking/quickstart/notebooks/tracking_quickstart',
1151              ],
1152            },
1153            {
1154              to: '/ml/tracking/system-metrics',
1155              from: ['/system-metrics'],
1156            },
1157            {
1158              to: '/ml/tracking/tracking-api',
1159              from: ['/tracking/tracking-api'],
1160            },
1161            {
1162              to: '/ml/tracking/tutorials/local-database',
1163              from: ['/tracking/tutorials/local-database'],
1164            },
1165            {
1166              to: '/ml/tracking/tutorials/remote-server',
1167              from: ['/tracking/tutorials/remote-server'],
1168            },
1169            {
1170              to: '/ml/traditional-ml',
1171              from: ['/traditional-ml'],
1172            },
1173            // Redirect consolidated prophet guide to index
1174            {
1175              to: '/ml/traditional-ml/prophet',
1176              from: ['/ml/traditional-ml/prophet/guide'],
1177            },
1178            // Redirect consolidated sparkml guide to index
1179            {
1180              to: '/ml/traditional-ml/sparkml',
1181              from: ['/ml/traditional-ml/sparkml/guide'],
1182            },
1183            {
1184              to: '/ml/traditional-ml/tutorials/creating-custom-pyfunc',
1185              from: ['/traditional-ml/creating-custom-pyfunc'],
1186            },
1187            {
1188              to: '/ml/traditional-ml/tutorials/creating-custom-pyfunc/notebooks',
1189              from: ['/traditional-ml/creating-custom-pyfunc/notebooks'],
1190            },
1191            {
1192              to: '/ml/traditional-ml/tutorials/creating-custom-pyfunc/notebooks/basic-pyfunc',
1193              from: ['/traditional-ml/creating-custom-pyfunc/notebooks/basic-pyfunc'],
1194            },
1195            {
1196              to: '/ml/traditional-ml/tutorials/creating-custom-pyfunc/notebooks/introduction',
1197              from: ['/traditional-ml/creating-custom-pyfunc/notebooks/introduction'],
1198            },
1199            {
1200              to: '/ml/traditional-ml/tutorials/creating-custom-pyfunc/notebooks/override-predict',
1201              from: ['/traditional-ml/creating-custom-pyfunc/notebooks/override-predict'],
1202            },
1203            {
1204              to: '/ml/traditional-ml/tutorials/creating-custom-pyfunc/part1-named-flavors',
1205              from: ['/traditional-ml/creating-custom-pyfunc/part1-named-flavors'],
1206            },
1207            {
1208              to: '/ml/traditional-ml/tutorials/creating-custom-pyfunc/part2-pyfunc-components',
1209              from: ['/traditional-ml/creating-custom-pyfunc/part2-pyfunc-components'],
1210            },
1211            {
1212              to: '/ml/traditional-ml/tutorials/hyperparameter-tuning',
1213              from: ['/traditional-ml/hyperparameter-tuning-with-child-runs'],
1214            },
1215            {
1216              to: '/ml/traditional-ml/tutorials/hyperparameter-tuning/notebooks',
1217              from: ['/traditional-ml/hyperparameter-tuning-with-child-runs/notebooks'],
1218            },
1219            {
1220              to: '/ml/traditional-ml/tutorials/hyperparameter-tuning/notebooks/hyperparameter-tuning-with-child-runs',
1221              from: [
1222                '/traditional-ml/hyperparameter-tuning-with-child-runs/notebooks/hyperparameter-tuning-with-child-runs',
1223              ],
1224            },
1225            {
1226              to: '/ml/traditional-ml/tutorials/hyperparameter-tuning/notebooks/logging-plots-in-mlflow',
1227              from: ['/traditional-ml/hyperparameter-tuning-with-child-runs/notebooks/logging-plots-in-mlflow'],
1228            },
1229            {
1230              to: '/ml/traditional-ml/tutorials/hyperparameter-tuning/notebooks/parent-child-runs',
1231              from: ['/traditional-ml/hyperparameter-tuning-with-child-runs/notebooks/parent-child-runs'],
1232            },
1233            {
1234              to: '/ml/traditional-ml/tutorials/hyperparameter-tuning/part1-child-runs',
1235              from: ['/traditional-ml/hyperparameter-tuning-with-child-runs/part1-child-runs'],
1236            },
1237            {
1238              to: '/ml/traditional-ml/tutorials/hyperparameter-tuning/part2-logging-plots',
1239              from: ['/traditional-ml/hyperparameter-tuning-with-child-runs/part2-logging-plots'],
1240            },
1241            {
1242              to: '/ml/traditional-ml/tutorials/serving-multiple-models-with-pyfunc',
1243              from: ['/traditional-ml/serving-multiple-models-with-pyfunc'],
1244            },
1245            {
1246              to: '/ml/traditional-ml/tutorials/serving-multiple-models-with-pyfunc/notebooks/MME_Tutorial',
1247              from: ['/traditional-ml/serving-multiple-models-with-pyfunc/notebooks/MME_Tutorial'],
1248            },
1249            {
1250              to: '/ml/tutorials-and-examples',
1251              from: ['/tutorials-and-examples'],
1252            },
1253            // Redirect removed sklearn subdirectories to consolidated page
1254            {
1255              to: '/ml/traditional-ml/sklearn/',
1256              from: ['/ml/traditional-ml/sklearn/guide', '/ml/traditional-ml/sklearn/quickstart/quickstart-sklearn'],
1257            },
1258            // Redirect removed XGBoost subdirectories to consolidated page
1259            {
1260              to: '/ml/traditional-ml/xgboost/',
1261              from: ['/ml/traditional-ml/xgboost/guide', '/ml/traditional-ml/xgboost/quickstart/quickstart-xgboost'],
1262            },
1263          ],
1264        },
1265      ],
1266    ],
1267  };
1268  
1269  export default config;