[{"data":1,"prerenderedAt":1990},["ShallowReactive",2],{"/blog/gitlab-duo-self-hosted-models-on-microsoft-foundry":3,"navigation-en-us":1230,"banner-en-us":1661,"footer-en-us":1671,"blog-post-authors-en-us-Evgeny Rudinsky":1932,"blog-related-posts-en-us-gitlab-duo-self-hosted-models-on-microsoft-foundry":1947,"blog-share-wrapper-en-us":1970,"next-steps-en-us":1980},{"id":4,"title":5,"authors":6,"body":8,"category":1212,"date":1213,"description":1214,"extension":1215,"externalUrl":1216,"faq":1216,"featured":175,"heroImage":1217,"meta":1218,"navigation":175,"path":1219,"seo":1220,"slug":1223,"stem":1224,"tags":1225,"template":1228,"updatedDate":1216,"__hash__":1229},"blogPosts/en-us/blog/gitlab-duo-self-hosted-models-on-microsoft-foundry.md","Bring your own model to GitLab Duo Self-Hosted with Microsoft Foundry",[7],"Evgeny Rudinsky",{"type":9,"value":10,"toc":1195},"minimark",[11,22,31,40,48,51,56,59,62,96,100,103,124,127,247,259,264,267,276,279,282,296,300,303,318,385,388,391,417,426,430,433,480,490,494,499,508,516,519,526,529,543,546,549,560,566,569,574,581,584,587,592,595,627,634,637,642,645,720,727,740,745,766,769,799,806,809,813,816,821,828,846,849,854,857,860,879,882,934,941,948,951,957,962,965,968,998,1001,1005,1008,1012,1020,1040,1048,1053,1073,1077,1080,1101,1105,1108,1139,1142,1146,1149,1152,1155,1159,1191],[12,13,14,15,21],"p",{},"For many organizations, the question about AI coding tools isn't whether they help, but where the code goes. Teams under data sovereignty, residency, or regulatory constraints need to know which network handles their source code before they can adopt anything. ",[16,17,20],"a",{"href":18,"rel":19},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/",[],"GitLab Duo Self-Hosted"," answers that by letting administrators connect GitLab Duo features to models running on infrastructure they choose, with control over hosting, region, network path, and credentials.",[12,23,24,25,30],{},"In this tutorial, we'll connect GitLab Duo Self-Hosted to models hosted in ",[16,26,29],{"href":27,"rel":28},"https://learn.microsoft.com/azure/foundry/what-is-foundry",[],"Microsoft Foundry",". Foundry is worth treating as a general-purpose serving platform rather than an OpenAI endpoint: Its catalog spans OpenAI GPT, Anthropic Claude, Meta Llama, and Mistral, and the families GitLab supports overlap heavily with what Foundry offers.",[12,32,33,34,39],{},"That matters because GitLab lets you assign a model per feature. You can run one family for agentic work, a code-specialized model for ",[16,35,38],{"href":36,"rel":37},"https://docs.gitlab.com/user/project/repository/code_suggestions/",[],"Code Suggestions",", and a smaller model where request volume dominates, all deployed and billed through one Azure subscription.",[12,41,42,43,47],{},"The setup steps are the same regardless of family. Only the model you deploy, the deployment name you reference, and the ",[44,45,46],"strong",{},"Model family"," you select in GitLab change.",[12,49,50],{},"Microsoft's catalog moves quickly and will contain releases newer than GitLab's supported-model matrix. Catalog availability alone does not establish GitLab Duo support, so always check both vendors' documentation before choosing a model.",[52,53,55],"h2",{"id":54},"why-gitlab-duo-self-hosted","Why GitLab Duo Self-Hosted?",[12,57,58],{},"GitLab Duo Self-Hosted lets you connect GitLab Duo to models deployed on-premises or through a supported cloud provider. Microsoft Foundry is useful when your organization already operates in Azure and wants to manage model deployments, access, networking, and consumption there.",[12,60,61],{},"Key benefits include:",[63,64,65,72,78,84,90],"ul",{},[66,67,68,71],"li",{},[44,69,70],{},"Deployment choice:"," Select the Azure region and deployment type that meet your availability and data-residency requirements.",[66,73,74,77],{},[44,75,76],{},"Multiple model families, one platform:"," Deploy GPT, Claude, Llama, or Mistral models side by side instead of contracting with each provider separately.",[66,79,80,83],{},[44,81,82],{},"Feature-level configuration:"," Assign models to individual GitLab Duo features instead of applying one model globally, mixing families if that suits your workloads.",[66,85,86,89],{},[44,87,88],{},"Azure integration:"," Apply Microsoft Entra identity, role-based access control, network isolation, and Azure Policy to your Foundry resources.",[66,91,92,95],{},[44,93,94],{},"Centralized operations:"," Monitor model usage and costs alongside your other Azure services.",[52,97,99],{"id":98},"architecture-overview","Architecture overview",[12,101,102],{},"The GitLab Duo Self-Hosted solution consists of three core components:",[104,105,106,112,118],"ol",{},[66,107,108,111],{},[44,109,110],{},"Self-managed GitLab instance",": Your existing GitLab instance where users interact with GitLab Duo features.",[66,113,114,117],{},[44,115,116],{},"AI Gateway",": A service that routes requests between GitLab and your chosen LLM backend.",[66,119,120,123],{},[44,121,122],{},"Model endpoints",": One or more model deployments exposed through Microsoft Foundry.",[12,125,126],{},"A single AI Gateway serves every model you configure, and GitLab decides which deployment to call based on the feature that made the request:",[128,129,134],"pre",{"className":130,"code":131,"language":132,"meta":133,"style":133},"language-mermaid shiki shiki-themes github-light","flowchart LR\n    subgraph self[\"Your infrastructure\"]\n        GL[\"Self-Managed\u003Cbr/>GitLab\"]\n        GW[\"AI Gateway\u003Cbr/>(port 5052)\"]\n    end\n\n    subgraph azure[\"Your Azure tenant\"]\n        subgraph foundry[\"Microsoft Foundry\"]\n            M1[\"duo-chat\u003Cbr/>Agentic Chat, Agent Platform\"]\n            M2[\"duo-code-gen\u003Cbr/>Code generation\"]\n            M3[\"duo-code-completion\u003Cbr/>Code completion\"]\n        end\n    end\n\n    GL -- HTTPS --> GW\n    GW --> M1\n    GW --> M2\n    GW --> M3\n","mermaid","",[135,136,137,146,152,158,164,170,177,183,189,195,201,207,213,218,223,229,235,241],"code",{"__ignoreMap":133},[138,139,142],"span",{"class":140,"line":141},"line",1,[138,143,145],{"class":144},"sgsFI","flowchart LR\n",[138,147,149],{"class":140,"line":148},2,[138,150,151],{"class":144},"    subgraph self[\"Your infrastructure\"]\n",[138,153,155],{"class":140,"line":154},3,[138,156,157],{"class":144},"        GL[\"Self-Managed\u003Cbr/>GitLab\"]\n",[138,159,161],{"class":140,"line":160},4,[138,162,163],{"class":144},"        GW[\"AI Gateway\u003Cbr/>(port 5052)\"]\n",[138,165,167],{"class":140,"line":166},5,[138,168,169],{"class":144},"    end\n",[138,171,173],{"class":140,"line":172},6,[138,174,176],{"emptyLinePlaceholder":175},true,"\n",[138,178,180],{"class":140,"line":179},7,[138,181,182],{"class":144},"    subgraph azure[\"Your Azure tenant\"]\n",[138,184,186],{"class":140,"line":185},8,[138,187,188],{"class":144},"        subgraph foundry[\"Microsoft Foundry\"]\n",[138,190,192],{"class":140,"line":191},9,[138,193,194],{"class":144},"            M1[\"duo-chat\u003Cbr/>Agentic Chat, Agent Platform\"]\n",[138,196,198],{"class":140,"line":197},10,[138,199,200],{"class":144},"            M2[\"duo-code-gen\u003Cbr/>Code generation\"]\n",[138,202,204],{"class":140,"line":203},11,[138,205,206],{"class":144},"            M3[\"duo-code-completion\u003Cbr/>Code completion\"]\n",[138,208,210],{"class":140,"line":209},12,[138,211,212],{"class":144},"        end\n",[138,214,216],{"class":140,"line":215},13,[138,217,169],{"class":144},[138,219,221],{"class":140,"line":220},14,[138,222,176],{"emptyLinePlaceholder":175},[138,224,226],{"class":140,"line":225},15,[138,227,228],{"class":144},"    GL -- HTTPS --> GW\n",[138,230,232],{"class":140,"line":231},16,[138,233,234],{"class":144},"    GW --> M1\n",[138,236,238],{"class":140,"line":237},17,[138,239,240],{"class":144},"    GW --> M2\n",[138,242,244],{"class":140,"line":243},18,[138,245,246],{"class":144},"    GW --> M3\n",[12,248,249,252,253,258],{},[44,250,251],{},"Note:"," You can use ",[16,254,257],{"href":255,"rel":256},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_llm_serving_platforms/",[],"another serving platform"," if you are running on-premises or using another cloud provider.",[260,261,263],"h3",{"id":262},"what-leaves-your-network","What leaves your network",[12,265,266],{},"This shape of deployment is what makes GitLab Duo workable for teams with data sovereignty obligations, so it's worth being precise about where data travels.",[12,268,269,270,275],{},"In a fully self-hosted configuration, ",[16,271,274],{"href":272,"rel":273},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/#data-transmission",[],"GitLab's documentation states"," that inference data — code inputs, model prompts, and model responses — does not leave your network. Requests go from your GitLab instance to your AI Gateway to your Foundry deployment, all within infrastructure you control. GitLab also does not capture which model or model provider you use.",[12,277,278],{},"What does leave, on an online license, is billing metadata: an instance ID, a de-identified user ID, a call count, and a timestamp. On an offline license, your instance doesn't connect to GitLab's billing components at all.",[12,280,281],{},"Two conditions attach to that:",[63,283,284,290],{},[66,285,286,289],{},[44,287,288],{},"It applies only to features backed by your own models."," If you route a feature to a GitLab-managed model, that feature's requests go to the GitLab-hosted AI Gateway instead, and the deployment is hybrid rather than fully self-hosted.",[66,291,292,295],{},[44,293,294],{},"Within Azure, residency depends on deployment type."," Data at rest stays in the Azure geography you choose, but where inferencing runs depends on whether you pick a global, data zone, or regional deployment. This is the setting to get right if you have jurisdictional requirements.",[52,297,299],{"id":298},"where-gitlab-support-and-the-foundry-catalog-overlap","Where GitLab support and the Foundry catalog overlap",[12,301,302],{},"Choosing a model means satisfying two independent constraints: GitLab must support it, and Foundry must offer it. Neither implies the other.",[12,304,305,306,311,312,317],{},"GitLab rates each supported model against four capability areas: code completion, code generation, ",[16,307,310],{"href":308,"rel":309},"https://docs.gitlab.com/user/duo_agent_platform/context/#gitlab-duo-agentic-chat",[],"GitLab Duo Agentic Chat",", and ",[16,313,316],{"href":314,"rel":315},"https://about.gitlab.com/gitlab-duo-agent-platform/",[],"GitLab Duo Agent Platform",". These families appear in both GitLab's supported-model table and the Foundry catalog:",[319,320,321,337],"table",{},[322,323,324],"thead",{},[325,326,327,331,334],"tr",{},[328,329,330],"th",{},"Family",[328,332,333],{},"How Foundry offers it",[328,335,336],{},"What to know",[338,339,340,352,363,374],"tbody",{},[325,341,342,346,349],{},[343,344,345],"td",{},"GPT",[343,347,348],{},"Sold by Azure",[343,350,351],{},"Deepest overlap with GitLab's table; simplest path. Includes general-purpose, coding-optimized, and smaller low-latency variants",[325,353,354,357,360],{},[343,355,356],{},"Claude",[343,358,359],{},"From partners, via Azure Marketplace",[343,361,362],{},"Strong agentic ratings; extra Marketplace prerequisites and narrower region coverage",[325,364,365,368,371],{},[343,366,367],{},"Llama",[343,369,370],{},"Sold by Azure and from partners",[343,372,373],{},"Ratings vary sharply by model size and feature",[325,375,376,379,382],{},[343,377,378],{},"Mistral",[343,380,381],{},"From partners",[343,383,384],{},"Includes Codestral, which is code-specialized",[386,387],"br",{},[12,389,390],{},"Specific version numbers move quickly on both sides, so this post deliberately avoids naming a \"best\" model. Instead, pick using these rules:",[63,392,393,399,405,411],{},[66,394,395,398],{},[44,396,397],{},"Simplest path:"," Choose a current general-purpose GPT model rated full functionality in all four areas.",[66,400,401,404],{},[44,402,403],{},"Ratings are per feature, not per family:"," This is a model that is excellent for GitLab Duo Agentic Chat can be rated limited for code completion. Check each feature you plan to enable rather than assuming a family is uniformly strong.",[66,406,407,410],{},[44,408,409],{},"Newer is not automatically supported:"," Foundry ships releases ahead of GitLab's matrix, and also carries families such as Grok, DeepSeek, and Phi that are not in GitLab's supported list. Use those only after GitLab adds them, or evaluate them under GitLab's compatible-models beta, which accepts any model exposed through an OpenAI-compatible endpoint.",[66,412,413,416],{},[44,414,415],{},"Older GPT-4 era models still appear in GitLab's table"," but are not the best starting point for a new deployment.",[12,418,419,420,425],{},"Always confirm current ratings in GitLab's ",[16,421,424],{"href":422,"rel":423},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/",[],"supported models"," page before you commit, and treat any model named in this post as an example rather than a recommendation.",[52,427,429],{"id":428},"prerequisites","Prerequisites",[12,431,432],{},"Before we begin, you'll need:",[63,434,435,444,447,450,453,468,471],{},[66,436,437,438,443],{},"A GitLab Premium or Ultimate Self-Managed instance. GitLab Duo Self-Hosted has been generally available since GitLab 17.9, but individual features have their own minimums, and GitLab Duo Agent Platform Self-Hosted requires a considerably later release. Check the ",[16,439,442],{"href":440,"rel":441},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/#feature-versions-and-status",[],"feature versions table"," for the features you plan to enable, and prefer a recent release for current model support.",[66,445,446],{},"The applicable GitLab Duo add-on for your deployment.",[66,448,449],{},"Administrator access to GitLab.",[66,451,452],{},"An Azure subscription with access to Microsoft Foundry.",[66,454,455,456,461,462,467],{},"Quota for each model you plan to deploy, in a supported Azure region and deployment type. Check region availability for ",[16,457,460],{"href":458,"rel":459},"https://learn.microsoft.com/azure/foundry/foundry-models/concepts/models-sold-directly-by-azure-region-availability?pivots=standard",[],"models sold by Azure"," or ",[16,463,466],{"href":464,"rel":465},"https://learn.microsoft.com/azure/ai-foundry/foundry-models/concepts/models-from-partners",[],"models from partners"," first.",[66,469,470],{},"For partner models such as Claude or Mistral, an Azure subscription eligible for Marketplace purchases and the required Marketplace permissions. Student, free-trial, and credit-only subscriptions are not supported.",[66,472,473,474,479],{},"A local AI Gateway installed according to the ",[16,475,478],{"href":476,"rel":477},"https://docs.gitlab.com/install/install_ai_gateway/",[],"GitLab installation documentation",".",[12,481,482,484,485,479],{},[44,483,251],{}," If you aren't a GitLab customer yet, you can ",[16,486,489],{"href":487,"rel":488},"https://about.gitlab.com/free-trial/",[],"start a free trial of GitLab Ultimate",[52,491,493],{"id":492},"implementation-steps","Implementation steps",[12,495,496],{},[44,497,498],{},"1. Deploy one or more models in Microsoft Foundry",[12,500,501,502,507],{},"Open the ",[16,503,506],{"href":504,"rel":505},"https://ai.azure.com",[],"Foundry portal",", select your project, and deploy your chosen models from the catalog. Model availability varies by region, cloud, and deployment type, and some subscriptions require an approved quota increase.",[12,509,510,511,515],{},"Before you deploy, confirm your model is offered in the region and deployment type you intend to use. Microsoft publishes this in ",[16,512,514],{"href":458,"rel":513},[],"Region availability for Foundry Models sold by Azure",", with separate tabs for standard, provisioned, and batch. Coverage is uneven: a model can be broadly available as Global Standard yet offered in only a handful of regions as Regional Provisioned Managed.",[12,517,518],{},"Partner models are more constrained than Azure OpenAI models. Claude, for example, is concentrated in a small number of regions, and deploying it requires accepting Marketplace terms. Verify both region and subscription eligibility before committing to a family.",[12,520,521],{},[522,523],"img",{"alt":524,"src":525,"title":524},"Microsoft Foundry models","https://res.cloudinary.com/about-gitlab-com/image/upload/v1787324016/jmxuhk8e13yvknwjkptf.png",[12,527,528],{},"Give each deployment a name you can trace later. GitLab references the deployment name rather than the catalog model name, so a vague name is hard to audit.",[12,530,531,532,461,535,538,539,542],{},"Naming by role rather than by model version, such as ",[135,533,534],{},"duo-chat",[135,536,537],{},"duo-code-completion",", has a practical advantage: when you upgrade to a newer model, you can point the deployment at it without editing the model identifier in GitLab. Naming by version, such as ",[135,540,541],{},"duo-gpt-5-2",", is more explicit but means reconfiguring GitLab on every model change.",[12,544,545],{},"If you're starting out, deploy a single model and expand once it works end to end.",[12,547,548],{},"After deployment, record these values for each deployment:",[63,550,551,554,557],{},[66,552,553],{},"The endpoint URL",[66,555,556],{},"The deployment name",[66,558,559],{},"An API key with access to the deployment",[12,561,562],{},[522,563],{"alt":564,"src":565,"title":564},"Microsoft Foundry - gpt-5-mini model","https://res.cloudinary.com/about-gitlab-com/image/upload/v1787324016/pgytbkghak6iwawqswdy.png",[12,567,568],{},"Use a secret-management process approved by your organization. Do not commit the API key to a repository.",[12,570,571],{},[44,572,573],{},"2. Install the AI Gateway",[12,575,576,577,479],{},"The AI Gateway routes requests between GitLab and the selected model endpoint. Install it with Docker or the Helm chart by following the ",[16,578,580],{"href":476,"rel":579},[],"current AI Gateway installation guide",[12,582,583],{},"Avoid copying an old image tag or API-version example from another tutorial. The AI Gateway and GitLab versions should remain compatible, and GitLab's installation guide provides the current image and required settings. The Foundry endpoint and API key are entered when you add each model to GitLab in step 4; they do not need to be embedded in the example Docker command.",[12,585,586],{},"One gateway serves every model you configure, so you don't need a separate gateway per deployment or per model family.",[12,588,589],{},[44,590,591],{},"3. Configure GitLab to access the AI Gateway",[12,593,594],{},"Now that the AI gateway is running, configure your GitLab instance to use it:",[63,596,597,603,609,615,622],{},[66,598,599,600,479],{},"On the left sidebar, at the bottom, select ",[44,601,602],{},"Admin",[66,604,605,606,479],{},"Select ",[44,607,608],{},"GitLab Duo",[66,610,611,612,479],{},"In the GitLab Duo section, select ",[44,613,614],{},"Change configuration",[66,616,617,618,621],{},"Under Local AI Gateway URL, enter the URL for your AI gateway and port (e.g., ",[135,619,620],{},"https://ai-gateway.example.com:5052",").",[66,623,605,624,479],{},[44,625,626],{},"Save changes",[12,628,629],{},[522,630],{"alt":631,"src":632,"title":633},"GitLab Duo - AIGW configuration","https://res.cloudinary.com/about-gitlab-com/image/upload/v1787324015/xm18m09lnxdme2vapegm.png","GitLab Duo AI Gateway configuration",[12,635,636],{},"For production deployments, use TLS and restrict network access to the gateway. If the gateway uses a private IP address or internal hostname, add it to GitLab's outbound-request allowlist.",[12,638,639],{},[44,640,641],{},"4. Add each deployment to GitLab",[12,643,644],{},"Repeat this procedure once per Foundry deployment you want GitLab to use.",[63,646,647,652,657,662,667,716],{},[66,648,649,650,479],{},"In the upper-right corner, select ",[44,651,602],{},[66,653,654,655,479],{},"In the left sidebar, select ",[44,656,608],{},[66,658,605,659,479],{},[44,660,661],{},"Configure models for GitLab Duo",[66,663,605,664,479],{},[44,665,666],{},"Add self-hosted model",[66,668,669,670],{},"Complete the fields:\n",[63,671,672,681,691,697,703],{},[66,673,674,677,678,479],{},[44,675,676],{},"Deployment name:"," Enter a recognizable name, such as ",[135,679,680],{},"Agentic Chat on Microsoft Foundry",[66,682,683,686,687,461,689,479],{},[44,684,685],{},"Model family:"," Select the family that matches the model, such as ",[44,688,345],{},[44,690,356],{},[66,692,693,696],{},[44,694,695],{},"Endpoint:"," Enter the endpoint URL from your Foundry deployment.",[66,698,699,702],{},[44,700,701],{},"API key:"," Enter the API key for the deployment.",[66,704,705,708,709,712,713,479],{},[44,706,707],{},"Model identifier:"," Enter ",[135,710,711],{},"azure/YOUR-DEPLOYMENT-NAME",", using the exact deployment name from Foundry. For example, ",[135,714,715],{},"azure/duo-chat",[66,717,605,718,479],{},[44,719,666],{},[12,721,722],{},[522,723],{"alt":724,"src":725,"title":726},"GitLab Duo - self-hosted model configuration (gpt-5-codex)","https://res.cloudinary.com/about-gitlab-com/image/upload/v1787324015/dewnstl6f0cppbn1h8pm.png","GitLab Duo Self-Hosted model configuration",[12,728,729,730,733,734,739],{},"The prefix describes how a model is served, not who built it. Foundry can expose non-OpenAI models through the Azure OpenAI endpoint, in which case ",[135,731,732],{},"azure/"," still applies. If you deploy a partner model that you reach through a different Foundry endpoint, confirm the correct prefix in GitLab's ",[16,735,738],{"href":736,"rel":737},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/configure_duo_features/",[],"configuration documentation"," rather than assuming. A mismatched prefix produces the \"Model not found\" error described below.",[12,741,742],{},[44,743,744],{},"5. Assign models to GitLab Duo features",[63,746,747,756,763],{},[66,748,749,750,753,754,479],{},"In ",[44,751,752],{},"Admin > GitLab Duo",", select ",[44,755,661],{},[66,757,758,759,762],{},"Select the ",[44,760,761],{},"AI-native features"," tab.",[66,764,765],{},"For each feature you want to route to Foundry, select a deployment from the dropdown list.",[12,767,768],{},"This is where the breadth of the catalog pays off, because features do not have to share one model or even one family. One reasonable split:",[63,770,771,777,783,793],{},[66,772,773,776],{},[44,774,775],{},"Code completion:"," a smaller, faster model from the family you chose, where request volume is high and latency is most visible.",[66,778,779,782],{},[44,780,781],{},"Code generation:"," a code-specialized model, such as a Codex or Codestral variant.",[66,784,785,788,789,792],{},[44,786,787],{},"GitLab Duo Agentic Chat:"," a broadly capable general-purpose model. If you don't set a model for an individual chat sub-feature, it inherits the model configured for ",[44,790,791],{},"General Chat"," in the Admin area.",[66,794,795,798],{},[44,796,797],{},"GitLab Duo Agent Platform:"," any model rated full functionality for Agent Platform in GitLab's matrix. Smaller models are often rated lower here than they are for completion and chat.",[12,800,801],{},[522,802],{"alt":803,"src":804,"title":805},"GitLab Duo - model selection","https://res.cloudinary.com/about-gitlab-com/image/upload/v1787324015/cf49jsxredaywidggfcs.png","GitLab Duo model selection",[12,807,808],{},"Treat that split as a starting hypothesis rather than a tuned configuration. Begin with a single model across the features you plan to enable so you have a clean quality, latency, and cost baseline, then introduce a second model only where your own measurements justify it.",[52,810,812],{"id":811},"verifying-your-setup","Verifying your setup",[12,814,815],{},"To ensure that your GitLab Duo Self-Hosted implementation with Microsoft Foundry is working correctly, perform these verification steps:",[12,817,818],{},[44,819,820],{},"1. Run the health check",[12,822,823,824,827],{},"After running the health check of your model to be sure that it's up and running, return to the GitLab Duo section from the Admin page and click on ",[44,825,826],{},"Run health check",". This will verify if:",[63,829,830,833,836,839],{},[66,831,832],{},"The AI gateway URL is properly configured.",[66,834,835],{},"Your instance can connect to the AI gateway.",[66,837,838],{},"The required GitLab Duo add-on is active.",[66,840,841,842],{},"A model is assigned to Code Suggestions — ",[843,844,845],"em",{},"as this is the model used to test the connection.",[12,847,848],{},"If the health check reports issues, refer to the troubleshooting guide for common errors.",[12,850,851],{},[44,852,853],{},"2. Scaffold a FastAPI service with code generation",[12,855,856],{},"Code generation is a good first test because it exercises the whole path end to end and produces an unmistakable result. It also sends more context than code completion, so a misconfigured endpoint or an undersized quota shows up immediately.",[12,858,859],{},"Code Suggestions has two distinct behaviors, and knowing which one you're triggering matters when you interpret the result:",[63,861,862,868],{},[66,863,864,867],{},[44,865,866],{},"Code completion"," fires as you type and finishes the current line. Low latency, usually under a second.",[66,869,870,873,874,878],{},[44,871,872],{},"Code generation"," fires when you press ",[875,876,877],"kbd",{},"Enter"," after a comment describing what you want. It can return whole functions or classes, and may take more than five seconds.",[12,880,881],{},"To scaffold a FastAPI service:",[104,883,884,891,917,923],{},[66,885,886,887,890],{},"Open a project in your IDE and create an empty file, such as ",[135,888,889],{},"main.py",". Code generation is more accurate when the file has fewer than five lines, so an empty file is the ideal starting point.",[66,892,893,894],{},"Write a comment that names the framework and states the outcome you want:",[128,895,899],{"className":896,"code":897,"language":898,"meta":133,"style":133},"language-python shiki shiki-themes github-light","# Create a FastAPI service with a health check endpoint and CRUD endpoints for\n# a \"tasks\" resource backed by an in-memory list. Use Pydantic models for\n# request and response bodies, and return appropriate HTTP status codes.\n","python",[135,900,901,907,912],{"__ignoreMap":133},[138,902,903],{"class":140,"line":141},[138,904,906],{"class":905},"sAwPA","# Create a FastAPI service with a health check endpoint and CRUD endpoints for\n",[138,908,909],{"class":140,"line":148},[138,910,911],{"class":905},"# a \"tasks\" resource backed by an in-memory list. Use Pydantic models for\n",[138,913,914],{"class":140,"line":154},[138,915,916],{"class":905},"# request and response bodies, and return appropriate HTTP status codes.\n",[66,918,919,920,922],{},"Press ",[875,921,877],{}," after the comment. The trailing newline signals that your instructions are complete.",[66,924,925,926,929,930,933],{},"Wait for the suggestion, then press ",[875,927,928],{},"Tab"," to accept it or ",[875,931,932],{},"Esc"," to reject it.",[12,935,936],{},[522,937],{"alt":938,"src":939,"title":940},"Code generation - scaffold fast-api","https://res.cloudinary.com/about-gitlab-com/image/upload/v1787324329/ulvwhf2x8wmpnfjpedyl.gif","Scaffold a FastAPI service with code generation",[12,942,943,944,947],{},"Naming the framework explicitly is what makes this work. GitLab's guidance for code generation is to state the outcome, stay specific but concise, and name the library or framework you want. A vaguer comment such as ",[135,945,946],{},"# web service"," gives the model far less to work with.",[12,949,950],{},"Two things to expect. Code generation output is capped at roughly 2048 tokens, so you'll get a solid scaffold rather than a finished application. And because these models are non-deterministic, the same comment won't produce identical code twice, which is normal rather than a sign of misconfiguration.",[12,952,953,954,956],{},"If you assigned different models to different features, test them separately so a failure points at one deployment. Confirming code generation also confirms that the model you mapped to ",[44,955,872],{}," in Step 5 is the one actually serving the request.",[12,958,959],{},[44,960,961],{},"3. Check AI Gateway logs",[12,963,964],{},"Review the AI gateway logs to see requests being routed to your Microsoft Foundry deployments:",[12,966,967],{},"In your terminal, run:",[128,969,973],{"className":970,"code":971,"language":972,"meta":133,"style":133},"language-bash shiki shiki-themes github-light","docker logs gitlab-ai-gateway --tail 100 -f\n","bash",[135,974,975],{"__ignoreMap":133},[138,976,977,981,985,988,992,995],{"class":140,"line":141},[138,978,980],{"class":979},"s7eDp","docker",[138,982,984],{"class":983},"sYBdl"," logs",[138,986,987],{"class":983}," gitlab-ai-gateway",[138,989,991],{"class":990},"sYu0t"," --tail",[138,993,994],{"class":990}," 100",[138,996,997],{"class":990}," -f\n",[12,999,1000],{},"You should see log entries indicating successful requests to the configured model endpoint. Avoid enabling prompt logging unless your organization's data-handling policy permits it.",[52,1002,1004],{"id":1003},"next-steps","Next steps",[12,1006,1007],{},"Here are the next steps to take.",[260,1009,1011],{"id":1010},"keep-model-selection-current","Keep model selection current",[12,1013,1014,1015],{},"The GitLab team actively tests each model's performance for each feature and provides ",[16,1016,1019],{"href":1017,"rel":1018},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/#supported-models",[],"tier ranking of model's performance and suitability:",[63,1021,1022,1028,1034],{},[66,1023,1024,1027],{},[44,1025,1026],{},"Full functionality:"," The model can likely handle the feature without any loss of quality.",[66,1029,1030,1033],{},[44,1031,1032],{},"Partial functionality:"," The feature works, but there might be compromises or limitations.",[66,1035,1036,1039],{},[44,1037,1038],{},"Limited functionality:"," The model is unsuitable for the feature and might produce significant quality loss or performance issues.",[12,1041,1042,1043,1047],{},"Do not infer compatibility from the model name or from its presence in the Foundry catalog. Use GitLab's ",[16,1044,1046],{"href":422,"rel":1045},[],"models and hardware requirements"," page as the source of truth for GitLab's current ratings.",[12,1049,1050],{},[44,1051,1052],{},"Cost optimization strategies:",[63,1054,1055,1058,1061,1064,1067,1070],{},[66,1056,1057],{},"Begin with a single model rated full in all four areas across the features you plan to enable.",[66,1059,1060],{},"Measure quality, latency, token use, rate-limit behavior, and cost with representative workloads.",[66,1062,1063],{},"Move high-volume features such as code completion to a smaller model once you have confirmed the quality trade-off is acceptable, and check its GitLab Duo Agent Platform rating before reusing it there.",[66,1065,1066],{},"Consider a code-specialized model for Code Suggestions if generation quality matters more than cost for your teams.",[66,1068,1069],{},"Review the GitLab support matrix and Microsoft's model-retirement schedule regularly.",[66,1071,1072],{},"Monitor consumption through Azure Cost Management and configure budgets or alerts appropriate to your organization.",[260,1074,1076],{"id":1075},"going-beyond-microsoft-foundry","Going beyond Microsoft Foundry",[12,1078,1079],{},"While this guide focuses on Microsoft Foundry integration, GitLab Duo Self-Hosted supports multiple deployment options:",[104,1081,1082,1090,1098],{},[66,1083,1084,1089],{},[16,1085,1088],{"href":1086,"rel":1087},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_llm_serving_platforms/#vllm",[],"On-premises with vLLM",": Serve a supported or OpenAI API-compatible model on infrastructure you manage.",[66,1091,1092,1097],{},[16,1093,1096],{"href":1094,"rel":1095},"https://docs.gitlab.com/administration/gitlab_duo_self_hosted/supported_llm_serving_platforms/#for-cloud-hosted-model-deployments",[],"Amazon Bedrock",": Similar to Microsoft Foundry, you can use Amazon Bedrock for cloud-hosted models.",[66,1099,1100],{},"Other validated providers, including Anthropic, OpenAI, and Gemini Enterprise Agent Platform.",[260,1102,1104],{"id":1103},"enterprise-integration-with-azure","Enterprise integration with Azure",[12,1106,1107],{},"Microsoft Foundry offers unique advantages for organizations already invested in the Azure ecosystem:",[63,1109,1110,1116,1122,1128],{},[66,1111,1112,1115],{},[44,1113,1114],{},"Unified billing:"," Track model consumption with your other Azure services.",[66,1117,1118,1121],{},[44,1119,1120],{},"Microsoft Entra integration:"," Apply existing identity and role-management practices to Foundry resources.",[66,1123,1124,1127],{},[44,1125,1126],{},"Private networking:"," Evaluate private endpoints and your GitLab-to-Azure network path based on your security architecture.",[66,1129,1130,1133,1134,1138],{},[44,1131,1132],{},"Regional deployment:"," Choose among the ",[16,1135,1137],{"href":458,"rel":1136},[],"regions and deployment types"," where the selected model is available, keeping in mind the residency distinction described earlier.",[12,1140,1141],{},"These capabilities can support a compliance program, but they do not make a GitLab Duo deployment compliant by themselves. Validate the complete architecture, data flows, logging, retention, contracts, and operational controls against your requirements.",[52,1143,1145],{"id":1144},"summary","Summary",[12,1147,1148],{},"GitLab Duo Self-Hosted with Microsoft Foundry lets organizations serve GitLab Duo features from Azure-hosted models. Because Foundry's catalog spans GPT, Claude, Llama, and Mistral, and GitLab supports models from each, one Azure subscription can cover the families you need. Start with one broadly capable model, then assign different models to different features as your measurements justify.",[12,1150,1151],{},"Model names in this post are examples, not recommendations. Both catalogs change frequently, so treat the two vendor matrices as the source of truth at the time you deploy.",[12,1153,1154],{},"The durable lesson is to treat model selection as a compatibility decision, not a catalog-shopping exercise. Check GitLab's support matrix, confirm availability and lifecycle status in Microsoft Foundry, deploy the models, and then validate them with your own workloads before broad rollout.",[52,1156,1158],{"id":1157},"get-started","Get started",[63,1160,1161,1169,1175,1182],{},[66,1162,1163,1164,1168],{},"Read the ",[16,1165,1167],{"href":18,"rel":1166},[],"GitLab Duo Self-Hosted documentation"," for the full configuration reference.",[66,1170,1171,1172,479],{},"Explore what you can build with the ",[16,1173,316],{"href":314,"rel":1174},[],[66,1176,1177,1178,479],{},"New to GitLab? Start a ",[16,1179,1181],{"href":487,"rel":1180},[],"free trial of GitLab Ultimate",[66,1183,1184,1185,1190],{},"Planning a rollout across teams? ",[16,1186,1189],{"href":1187,"rel":1188},"https://about.gitlab.com/sales/",[],"Contact a GitLab representative"," to talk through licensing and architecture.",[1192,1193,1194],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":133,"searchDepth":148,"depth":148,"links":1196},[1197,1198,1201,1202,1203,1204,1205,1210,1211],{"id":54,"depth":148,"text":55},{"id":98,"depth":148,"text":99,"children":1199},[1200],{"id":262,"depth":154,"text":263},{"id":298,"depth":148,"text":299},{"id":428,"depth":148,"text":429},{"id":492,"depth":148,"text":493},{"id":811,"depth":148,"text":812},{"id":1003,"depth":148,"text":1004,"children":1206},[1207,1208,1209],{"id":1010,"depth":154,"text":1011},{"id":1075,"depth":154,"text":1076},{"id":1103,"depth":154,"text":1104},{"id":1144,"depth":148,"text":1145},{"id":1157,"depth":148,"text":1158},"ai","2026-09-08","Learn how to connect GitLab Duo Self-Hosted to GPT, Claude, Llama, and Mistral models hosted in Microsoft Foundry, and how to choose between them.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1787324016/phyqraesycoaovekyzqo.png",{},"/en-us/blog/gitlab-duo-self-hosted-models-on-microsoft-foundry",{"config":1221,"title":5,"description":1214},{"noIndex":1222},false,"gitlab-duo-self-hosted-models-on-microsoft-foundry","en-us/blog/gitlab-duo-self-hosted-models-on-microsoft-foundry",[1226,1227],"AI","tutorial","BlogPost","08e-RFMyDwQh7aP3GZFKmzmLmSeyOF6uJ6jqk_ujT38",{"logo":1231,"freeTrial":1236,"sales":1241,"login":1246,"items":1251,"search":1582,"minimal":1612,"duo":1631,"switchNav":1640,"pricingDeployment":1651},{"config":1232},{"href":1233,"dataGaName":1234,"dataGaLocation":1235},"/","gitlab logo","header",{"text":1237,"config":1238},"Get free trial",{"href":1239,"dataGaName":1240,"dataGaLocation":1235},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":1242,"config":1243},"Request a demo",{"href":1244,"dataGaName":1245,"dataGaLocation":1235},"/request-a-demo/","sales",{"text":1247,"config":1248},"Sign in",{"href":1249,"dataGaName":1250,"dataGaLocation":1235},"https://gitlab.com/users/sign_in/","sign in",[1252,1338,1426,1431,1506,1560],{"text":1253,"left":175,"config":1254,"menu":1256},"Platform",{"dataNavLevelOne":1255},"platform",{"type":1257,"link":1258,"columns":1262,"feature":1327},"lists",{"text":1259,"config":1260},"Explore the Platform",{"href":1261,"dataGaName":1255,"dataGaLocation":1235},"/platform/",[1263,1286,1309],{"title":1264,"items":1265},"Execution & Workflows",[1266,1271,1276,1281],{"text":1267,"config":1268},"CI/CD",{"href":1269,"dataGaLocation":1235,"dataGaName":1270},"/solutions/continuous-integration/","ci/cd",{"text":1272,"config":1273},"Source Code Management",{"href":1274,"dataGaLocation":1235,"dataGaName":1275},"/solutions/source-code-management/","source code management",{"text":1277,"config":1278},"Agile Delivery",{"href":1279,"dataGaLocation":1235,"dataGaName":1280},"/solutions/agile-delivery/","agile delivery",{"text":1282,"config":1283},"Artifact Management",{"href":1284,"dataGaLocation":1235,"dataGaName":1285},"/artifact-central/","artifact management",{"title":1287,"items":1288},"Security & Governance",[1289,1294,1299,1304],{"text":1290,"config":1291},"Application Security Testing",{"href":1292,"dataGaLocation":1235,"dataGaName":1293},"/solutions/application-security-testing/","application security testing",{"text":1295,"config":1296},"Governance & Compliance",{"href":1297,"dataGaLocation":1235,"dataGaName":1298},"/solutions/software-compliance/","governance and compliance",{"text":1300,"config":1301},"Secrets Management",{"href":1302,"dataGaLocation":1235,"dataGaName":1303},"/gitlab-secrets-manager/","secrets management",{"text":1305,"config":1306},"Supply Chain Security",{"href":1307,"dataGaLocation":1235,"dataGaName":1308},"/solutions/supply-chain/","supply chain security",{"title":1310,"items":1311},"Context & AI",[1312,1317,1322],{"text":1313,"config":1314},"Agentic Orchestration",{"href":1315,"dataGaLocation":1235,"dataGaName":1316},"/gitlab-duo-agent-platform/","agentic orchestration",{"text":1318,"config":1319},"Context Graph",{"href":1320,"dataGaLocation":1235,"dataGaName":1321},"/gitlab-orbit/","context graph",{"text":1323,"config":1324},"Visibility & Measurement",{"href":1325,"dataGaLocation":1235,"dataGaName":1326},"/solutions/visibility-measurement/","visibility and measurement",{"config":1328,"title":1331,"text":1332,"link":1333},{"background":1329,"textColor":1330},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1790185102/o7dn32anqcb6z8dgd3as.jpg')","#000","Why GitLab","One platform for speed with control across your software lifecycle.",{"text":1334,"config":1335},"Learn more",{"href":1336,"dataGaName":1337,"dataGaLocation":1235},"/why-gitlab/","why gitlab",{"text":1339,"left":175,"config":1340,"menu":1342},"Solutions",{"dataNavLevelOne":1341},"solutions",{"type":1257,"link":1343,"columns":1347,"feature":1417},{"text":1344,"config":1345},"View all Solutions",{"href":1346,"dataGaName":1341,"dataGaLocation":1235},"/solutions/",[1348,1366,1384],{"title":1349,"items":1350},"Outcomes",[1351,1356,1361],{"text":1352,"config":1353},"DevOps Modernization",{"href":1354,"dataGaLocation":1235,"dataGaName":1355},"/assessments/devops-modernization-assessment/","devops modernization",{"text":1357,"config":1358},"Security Modernization",{"href":1359,"dataGaLocation":1235,"dataGaName":1360},"/assessments/security-modernization-assessment/","security modernization",{"text":1362,"config":1363},"AI Modernization",{"href":1364,"dataGaLocation":1235,"dataGaName":1365},"/assessments/ai-modernization-assessment/","ai modernization",{"title":1367,"items":1368},"By size",[1369,1374,1379],{"text":1370,"config":1371},"Enterprise",{"href":1372,"dataGaLocation":1235,"dataGaName":1373},"/enterprise/","enterprise",{"text":1375,"config":1376},"Small Business",{"href":1377,"dataGaLocation":1235,"dataGaName":1378},"/small-business/","small business",{"text":1380,"config":1381},"Startups",{"href":1382,"dataGaLocation":1235,"dataGaName":1383},"/solutions/startups/","startups",{"title":1385,"items":1386},"Industries",[1387,1392,1397,1402,1407,1412],{"text":1388,"config":1389},"Financial Services",{"href":1390,"dataGaLocation":1235,"dataGaName":1391},"/solutions/finance/","financial services",{"text":1393,"config":1394},"Public Sector",{"href":1395,"dataGaLocation":1235,"dataGaName":1396},"/solutions/public-sector/","public sector",{"text":1398,"config":1399},"Telecommunications",{"href":1400,"dataGaLocation":1235,"dataGaName":1401},"/solutions/telecommunications/","telecommunications",{"text":1403,"config":1404},"Automotive",{"href":1405,"dataGaLocation":1235,"dataGaName":1406},"/solutions/automotive/","automotive",{"text":1408,"config":1409},"Education",{"href":1410,"dataGaLocation":1235,"dataGaName":1411},"/solutions/education/","education",{"text":1413,"config":1414},"Aerospace",{"href":1415,"dataGaLocation":1235,"dataGaName":1416},"/solutions/aerospace/","aerospace",{"config":1418,"title":1419,"text":1420,"link":1421},{"background":1329,"textColor":1330},"GitLab Security Standard","Learn how to harden your software factory and let AI agents earn autonomy, without trading away security.",{"text":1422,"config":1423},"Explore the standard",{"href":1424,"dataGaName":1425,"dataGaLocation":1235},"/gitlab-security-standard/","gitlab security standard",{"text":1427,"config":1428},"Pricing",{"href":1429,"dataGaName":1430,"dataGaLocation":1235,"dataNavLevelOne":1430},"/pricing/","pricing",{"text":1432,"config":1433,"menu":1435},"Resources",{"dataNavLevelOne":1434},"resources",{"type":1257,"link":1436,"columns":1440,"feature":1497},{"text":1437,"config":1438},"View all resources",{"href":1439,"dataGaName":1434,"dataGaLocation":1235},"/resources/",[1441,1469],{"title":1442,"items":1443},"Discover",[1444,1449,1454,1459,1464],{"text":1445,"config":1446},"Docs",{"href":1447,"dataGaName":1448,"dataGaLocation":1235},"https://docs.gitlab.com/","docs",{"text":1450,"config":1451},"University",{"href":1452,"dataGaName":1453,"dataGaLocation":1235},"https://university.gitlab.com/","university",{"text":1455,"config":1456},"Demo Series",{"href":1457,"dataGaName":1458,"dataGaLocation":1235},"/gitlab-technical-demo-series/","demo series",{"text":1460,"config":1461},"Demo Hub",{"href":1462,"dataGaName":1463,"dataGaLocation":1235},"/demo-hub/","demo hub",{"text":1465,"config":1466},"Services",{"href":1467,"dataGaName":1468,"dataGaLocation":1235},"/services/","services",{"title":1470,"items":1471},"Connect",[1472,1477,1482,1487,1492],{"text":1473,"config":1474},"Blog",{"href":1475,"dataGaName":1476,"dataGaLocation":1235},"/blog/","blog",{"text":1478,"config":1479},"Community",{"href":1480,"dataGaName":1481,"dataGaLocation":1235},"/community/","community",{"text":1483,"config":1484},"Customers",{"href":1485,"dataGaName":1486,"dataGaLocation":1235},"/customers/","customers",{"text":1488,"config":1489},"Partners",{"href":1490,"dataGaName":1491,"dataGaLocation":1235},"/partners/","partners",{"text":1493,"config":1494},"Events",{"href":1495,"dataGaName":1496,"dataGaLocation":1235},"/events/","events",{"config":1498,"title":1499,"text":1500,"link":1501},{"background":1329,"textColor":1330},"What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":1502,"config":1503},"Read the latest",{"href":1504,"dataGaName":1505,"dataGaLocation":1235},"/whats-new/","whats new",{"text":1507,"config":1508,"menu":1510},"Company",{"dataNavLevelOne":1509},"company",{"type":1257,"columns":1511},[1512],{"items":1513},[1514,1519,1525,1530,1535,1540,1545,1550,1555],{"text":1515,"config":1516},"About",{"href":1517,"dataGaName":1518,"dataGaLocation":1235},"/company/","about",{"text":1520,"config":1521,"footerGa":1524},"Jobs",{"href":1522,"dataGaName":1523,"dataGaLocation":1235},"/jobs/","jobs",{"dataGaName":1523},{"text":1526,"config":1527},"Press",{"href":1528,"dataGaName":1529,"dataGaLocation":1235},"/press/","press",{"text":1531,"config":1532},"Handbook",{"href":1533,"dataGaName":1534,"dataGaLocation":1235},"https://handbook.gitlab.com/","handbook",{"text":1536,"config":1537},"Leadership",{"href":1538,"dataGaName":1539,"dataGaLocation":1235},"/company/team/e-group/","leadership",{"text":1541,"config":1542},"Investor relations",{"href":1543,"dataGaName":1544,"dataGaLocation":1235},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1546,"config":1547},"Trust Center",{"href":1548,"dataGaName":1549,"dataGaLocation":1235},"/security/","trust center",{"text":1551,"config":1552},"AI Transparency Center",{"href":1553,"dataGaName":1554,"dataGaLocation":1235},"/ai-transparency-center/","ai transparency center",{"text":1556,"config":1557},"Newsletter",{"href":1558,"dataGaName":1559,"dataGaLocation":1235},"/company/contact/#contact-forms","newsletter",{"text":1561,"config":1562,"menu":1563},"Contact us",{"dataNavLevelOne":1509},{"type":1257,"columns":1564},[1565],{"items":1566},[1567,1572,1577],{"text":1568,"config":1569},"Talk to sales",{"href":1570,"dataGaName":1571,"dataGaLocation":1235},"/sales/","talk to sales",{"text":1573,"config":1574},"Support portal",{"href":1575,"dataGaName":1576,"dataGaLocation":1235},"https://support.gitlab.com/hc/en-us","support portal",{"text":1578,"config":1579},"Customer portal",{"href":1580,"dataGaName":1581,"dataGaLocation":1235},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1583,"login":1584,"suggestions":1591},"Close",{"text":1585,"link":1586},"To search repositories and projects, login to",{"text":1587,"config":1588},"gitlab.com",{"href":1249,"dataGaName":1589,"dataGaLocation":1590},"search login","search",{"text":1592,"default":1593},"Suggestions",[1594,1596,1599,1601,1605,1609],{"text":316,"config":1595},{"href":1315,"dataGaName":316,"dataGaLocation":1590},{"text":1597,"config":1598},"Code Suggestions (AI)",{"href":1315,"dataGaName":1597,"dataGaLocation":1590},{"text":1267,"config":1600},{"href":1269,"dataGaName":1267,"dataGaLocation":1590},{"text":1602,"config":1603},"GitLab on AWS",{"href":1604,"dataGaName":1602,"dataGaLocation":1590},"/partners/technology-partners/aws/",{"text":1606,"config":1607},"GitLab on Google Cloud",{"href":1608,"dataGaName":1606,"dataGaLocation":1590},"/partners/technology-partners/google-cloud-platform/",{"text":1610,"config":1611},"Why GitLab?",{"href":1336,"dataGaName":1610,"dataGaLocation":1590},{"freeTrial":1613,"mobileIcon":1618,"desktopIcon":1623,"secondaryButton":1626},{"text":1614,"config":1615},"Start free trial",{"href":1616,"dataGaName":1240,"dataGaLocation":1617},"https://gitlab.com/-/trials/new/","nav",{"altText":1619,"config":1620},"Gitlab Icon",{"src":1621,"dataGaName":1622,"dataGaLocation":1617},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1619,"config":1624},{"src":1625,"dataGaName":1622,"dataGaLocation":1617},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1627,"config":1628},"Get Started",{"href":1629,"dataGaName":1630,"dataGaLocation":1617},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1632,"mobileIcon":1636,"desktopIcon":1638},{"text":1633,"config":1634},"Learn more about GitLab Duo",{"href":1315,"dataGaName":1635,"dataGaLocation":1617},"gitlab duo",{"altText":1619,"config":1637},{"src":1621,"dataGaName":1622,"dataGaLocation":1617},{"altText":1619,"config":1639},{"src":1625,"dataGaName":1622,"dataGaLocation":1617},{"button":1641,"mobileIcon":1646,"desktopIcon":1648},{"text":1642,"config":1643},"/switch",{"href":1644,"dataGaName":1645,"dataGaLocation":1617},"#contact","switch",{"altText":1619,"config":1647},{"src":1621,"dataGaName":1622,"dataGaLocation":1617},{"altText":1619,"config":1649},{"src":1650,"dataGaName":1622,"dataGaLocation":1617},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1652,"mobileIcon":1657,"desktopIcon":1659},{"text":1653,"config":1654},"Back to pricing",{"href":1429,"dataGaName":1655,"dataGaLocation":1617,"icon":1656},"back to pricing","GoBack",{"altText":1619,"config":1658},{"src":1621,"dataGaName":1622,"dataGaLocation":1617},{"altText":1619,"config":1660},{"src":1625,"dataGaName":1622,"dataGaLocation":1617},{"title":1662,"button":1663,"config":1669},"Ship at agent speed. Prove every step. Transcend is here.",{"text":1664,"config":1665},"Watch now",{"href":1666,"dataGaName":1667,"dataGaLocation":1668},"/events/transcend/virtual/#watch-gitlab-transcend","transcend-october-2026-banner","global-banner",{"layout":1670,"disabled":1222},"release",{"data":1672},{"text":1673,"source":1674,"edit":1680,"contribute":1685,"config":1690,"items":1695,"minimal":1921},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1675,"config":1676},"View page source",{"href":1677,"dataGaName":1678,"dataGaLocation":1679},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1681,"config":1682},"Edit this page",{"href":1683,"dataGaName":1684,"dataGaLocation":1679},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1686,"config":1687},"Please contribute",{"href":1688,"dataGaName":1689,"dataGaLocation":1679},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1691,"facebook":1692,"youtube":1693,"linkedin":1694},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1696,1743,1801,1848,1889],{"title":1427,"links":1697,"subMenu":1712},[1698,1702,1707],{"text":1699,"config":1700},"View plans",{"href":1429,"dataGaName":1701,"dataGaLocation":1679},"view plans",{"text":1703,"config":1704},"Why Premium?",{"href":1705,"dataGaName":1706,"dataGaLocation":1679},"/pricing/premium/","why premium",{"text":1708,"config":1709},"Why Ultimate?",{"href":1710,"dataGaName":1711,"dataGaLocation":1679},"/pricing/ultimate/","why ultimate",[1713],{"title":1714,"links":1715},"Contact Us",[1716,1719,1721,1723,1728,1733,1738],{"text":1717,"config":1718},"Contact sales",{"href":1570,"dataGaName":1245,"dataGaLocation":1679},{"text":1573,"config":1720},{"href":1575,"dataGaName":1576,"dataGaLocation":1679},{"text":1578,"config":1722},{"href":1580,"dataGaName":1581,"dataGaLocation":1679},{"text":1724,"config":1725},"Status",{"href":1726,"dataGaName":1727,"dataGaLocation":1679},"https://status.gitlab.com/","status",{"text":1729,"config":1730},"Terms of use",{"href":1731,"dataGaName":1732,"dataGaLocation":1679},"/terms/","terms of use",{"text":1734,"config":1735},"Privacy statement",{"href":1736,"dataGaName":1737,"dataGaLocation":1679},"/privacy/","privacy statement",{"text":1739,"config":1740},"Cookie preferences",{"dataGaName":1741,"dataGaLocation":1679,"id":1742,"isOneTrustButton":175},"cookie preferences","ot-sdk-btn",{"title":1253,"links":1744,"subMenu":1758},[1745,1748,1750,1752,1754,1756],{"text":1746,"config":1747},"Explore the platform",{"href":1261,"dataGaName":1255,"dataGaLocation":1679},{"text":1313,"config":1749},{"href":1315,"dataGaName":1316,"dataGaLocation":1679},{"text":1267,"config":1751},{"href":1269,"dataGaName":1270,"dataGaLocation":1679},{"text":1318,"config":1753},{"href":1320,"dataGaName":1321,"dataGaLocation":1679},{"text":1300,"config":1755},{"href":1302,"dataGaName":1303,"dataGaLocation":1679},{"text":1331,"config":1757},{"href":1336,"dataGaName":1337,"dataGaLocation":1679},[1759],{"title":1760,"links":1761},"Topics",[1762,1766,1771,1776,1781,1786,1791,1796],{"text":1267,"config":1763},{"href":1764,"dataGaName":1765,"dataGaLocation":1679},"/topics/ci-cd/","cicd",{"text":1767,"config":1768},"GitOps",{"href":1769,"dataGaName":1770,"dataGaLocation":1679},"/topics/gitops/","gitops",{"text":1772,"config":1773},"DevOps",{"href":1774,"dataGaName":1775,"dataGaLocation":1679},"/topics/devops/","devops",{"text":1777,"config":1778},"Version Control",{"href":1779,"dataGaName":1780,"dataGaLocation":1679},"/topics/version-control/","version control",{"text":1782,"config":1783},"DevSecOps",{"href":1784,"dataGaName":1785,"dataGaLocation":1679},"/topics/devsecops/","devsecops",{"text":1787,"config":1788},"Cloud Native",{"href":1789,"dataGaName":1790,"dataGaLocation":1679},"/topics/cloud-native/","cloud native",{"text":1792,"config":1793},"AI for Coding",{"href":1794,"dataGaName":1795,"dataGaLocation":1679},"/topics/devops/ai-for-coding/","ai for coding",{"text":1797,"config":1798},"Agentic AI",{"href":1799,"dataGaName":1800,"dataGaLocation":1679},"/topics/agentic-ai/","agentic ai",{"title":1339,"links":1802},[1803,1806,1809,1812,1815,1818,1820,1822,1824,1826,1828,1831,1833,1836,1840,1844],{"text":1804,"config":1805},"DevOps modernization",{"href":1354,"dataGaName":1355,"dataGaLocation":1679},{"text":1807,"config":1808},"Security modernization",{"href":1359,"dataGaName":1360,"dataGaLocation":1679},{"text":1810,"config":1811},"AI modernization",{"href":1364,"dataGaName":1365,"dataGaLocation":1679},{"text":1813,"config":1814},"Financial services",{"href":1390,"dataGaName":1391,"dataGaLocation":1679},{"text":1816,"config":1817},"Public sector",{"href":1395,"dataGaName":1396,"dataGaLocation":1679},{"text":1398,"config":1819},{"href":1400,"dataGaName":1401,"dataGaLocation":1679},{"text":1403,"config":1821},{"href":1405,"dataGaName":1406,"dataGaLocation":1679},{"text":1408,"config":1823},{"href":1410,"dataGaName":1411,"dataGaLocation":1679},{"text":1413,"config":1825},{"href":1415,"dataGaName":1416,"dataGaLocation":1679},{"text":1370,"config":1827},{"href":1372,"dataGaName":1373,"dataGaLocation":1679},{"text":1829,"config":1830},"Small business",{"href":1377,"dataGaName":1378,"dataGaLocation":1679},{"text":1380,"config":1832},{"href":1382,"dataGaName":1383,"dataGaLocation":1679},{"text":1767,"config":1834},{"href":1835,"dataGaName":1770,"dataGaLocation":1679},"/solutions/gitops/",{"text":1837,"config":1838},"Software composition analysis",{"href":1307,"dataGaName":1839,"dataGaLocation":1679},"software composition analysis",{"text":1841,"config":1842},"Value stream management",{"href":1325,"dataGaName":1843,"dataGaLocation":1679},"value stream management",{"text":1845,"config":1846},"All solutions",{"href":1346,"dataGaName":1847,"dataGaLocation":1679},"all solutions",{"title":1432,"links":1849},[1850,1855,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1885],{"text":1851,"config":1852},"Install",{"href":1853,"dataGaName":1854,"dataGaLocation":1679},"/install/","install",{"text":1856,"config":1857},"Quick start guides",{"href":1858,"dataGaName":1859,"dataGaLocation":1679},"/get-started/","quick setup checklists",{"text":1445,"config":1861},{"href":1447,"dataGaName":1448,"dataGaLocation":1679},{"text":1450,"config":1863},{"href":1452,"dataGaName":1453,"dataGaLocation":1679},{"text":1455,"config":1865},{"href":1457,"dataGaName":1458,"dataGaLocation":1679},{"text":1460,"config":1867},{"href":1462,"dataGaName":1463,"dataGaLocation":1679},{"text":1465,"config":1869},{"href":1467,"dataGaName":1468,"dataGaLocation":1679},{"text":1473,"config":1871},{"href":1475,"dataGaName":1476,"dataGaLocation":1679},{"text":1478,"config":1873},{"href":1480,"dataGaName":1481,"dataGaLocation":1679},{"text":1483,"config":1875},{"href":1485,"dataGaName":1486,"dataGaLocation":1679},{"text":1488,"config":1877},{"href":1490,"dataGaName":1491,"dataGaLocation":1679},{"text":1493,"config":1879},{"href":1495,"dataGaName":1496,"dataGaLocation":1679},{"text":1556,"config":1881},{"href":1558,"dataGaName":1559,"dataGaLocation":1679},{"text":1883,"config":1884},"What's new",{"href":1504,"dataGaName":1505,"dataGaLocation":1679},{"text":1886,"config":1887},"All resources",{"href":1439,"dataGaName":1888,"dataGaLocation":1679},"all resources",{"title":1507,"links":1890},[1891,1893,1895,1897,1899,1901,1903,1905,1907,1911,1916],{"text":1515,"config":1892},{"href":1517,"dataGaName":1509,"dataGaLocation":1679},{"text":1520,"config":1894},{"href":1522,"dataGaName":1523,"dataGaLocation":1679},{"text":1526,"config":1896},{"href":1528,"dataGaName":1529,"dataGaLocation":1679},{"text":1531,"config":1898},{"href":1533,"dataGaName":1534,"dataGaLocation":1679},{"text":1536,"config":1900},{"href":1538,"dataGaName":1539,"dataGaLocation":1679},{"text":1541,"config":1902},{"href":1543,"dataGaName":1544,"dataGaLocation":1679},{"text":1546,"config":1904},{"href":1548,"dataGaName":1549,"dataGaLocation":1679},{"text":1551,"config":1906},{"href":1553,"dataGaName":1554,"dataGaLocation":1679},{"text":1908,"config":1909},"Sustainability",{"href":1910,"dataGaName":1908,"dataGaLocation":1679},"/sustainability/",{"text":1912,"config":1913},"Diversity, inclusion and belonging (DIB)",{"href":1914,"dataGaName":1915,"dataGaLocation":1679},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1917,"config":1918},"Modern Slavery Transparency Statement",{"href":1919,"dataGaName":1920,"dataGaLocation":1679},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1922},[1923,1926,1929],{"text":1924,"config":1925},"Terms",{"href":1731,"dataGaName":1732,"dataGaLocation":1679},{"text":1927,"config":1928},"Cookies",{"dataGaName":1741,"dataGaLocation":1679,"id":1742,"isOneTrustButton":175},{"text":1930,"config":1931},"Privacy",{"href":1736,"dataGaName":1737,"dataGaLocation":1679},[1933],{"id":1934,"title":7,"body":1216,"config":1935,"content":1937,"description":1216,"extension":1941,"meta":1942,"navigation":175,"path":1943,"seo":1944,"stem":1945,"__hash__":1946},"blogAuthors/en-us/blog/authors/evgeny-rudinsky.yml",{"template":1936},"BlogAuthor",{"name":7,"config":1938},{"ctfId":1939,"headshot":1940},"erudinsky","https://res.cloudinary.com/about-gitlab-com/image/upload/v1761069206/yppyhhdmdrw4u1nz7het.jpg","yml",{},"/en-us/blog/authors/evgeny-rudinsky",{},"en-us/blog/authors/evgeny-rudinsky","OtgSXy1cMxWS2khqtu-PdUFWhG9Eck_jUQfH5JUwzWM",[1948,1956,1963],{"title":1949,"description":1950,"heroImage":1951,"category":1212,"date":1952,"authors":1953,"slug":1955,"externalUrl":1216},"Scaling Git for the agentic software factory","GitLab is building next-gen source control for agentic workloads, combining machine-scale performance with context, security, and governance to deliver trusted software.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785336708/ww4mlighwlvvzgnmbe6w.png","2026-10-13",[1954],"Bill Staples","scaling-git-for-the-agentic-software-factory",{"title":1957,"description":1958,"heroImage":1959,"category":1212,"date":1952,"authors":1960,"slug":1962,"externalUrl":1216},"Make every AI credit count: See, cap, and reduce agent spend","Costs for agentic development multiply with every task. Pick the right model, cut agent retries with GitLab Orbit, and control spend with real-time analytics.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1791198675/kmajkudog4fj3xc6qfyb.png",[1961],"Allie Holland","make-every-ai-credit-count",{"title":1964,"description":1965,"heroImage":1966,"category":1212,"date":1952,"authors":1967,"slug":1969,"externalUrl":1216},"GitLab's agent orchestration eliminates the wait between development stages","GitLab Duo Agent Platform keeps review, tests, security, and approvals moving without a manual task between every handoff.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1791202579/fnumyad0wd7etsy55a9z.png",[1968],"Elisabeth Burrows","gitlab-agent-orchestration",{"header":1971,"text":1972,"button":1976,"disclaimer":1979},"Start your free\n\n30-day GitLab trial\n",[1973,1974,1975],"GitLab Duo Agent Platform access","Try our most advanced features","Automate complex tasks with AI",{"text":1237,"config":1977},{"href":1978,"dataGaName":1240,"dataGaLocation":1476},"https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/blog/","No credit card required.",{"header":1981,"blurb":1982,"button":1983,"secondaryButton":1988},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1984,"config":1985},"Get your free trial",{"href":1986,"dataGaName":1240,"dataGaLocation":1987},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1717,"config":1989},{"href":1570,"dataGaName":1245,"dataGaLocation":1987},1791944920361]