diff --git a/.github/workflows/sync-openapi.yml b/.github/workflows/sync-openapi.yml index 3223173d394f..9c81d3190bd2 100644 --- a/.github/workflows/sync-openapi.yml +++ b/.github/workflows/sync-openapi.yml @@ -42,15 +42,6 @@ jobs: path: rest-api-description ref: ${{ inputs.SOURCE_BRANCH }} - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - # By default, only the most recent commit of the `main` branch - # will be checked out - repository: github/models-gateway - path: models-gateway - ref: main - token: ${{ secrets.DOCS_BOT_PAT_BASE }} - - uses: ./.github/actions/node-npm-setup - name: Sync the REST, Webhooks, and GitHub Apps schemas @@ -60,7 +51,7 @@ jobs: NODE_OPTIONS: '--max-old-space-size=8192' run: | npm run sync-rest -- \ - --source-repos rest-api-description models-gateway \ + --source-repos rest-api-description \ --output rest github-apps webhooks rest-redirects git status echo "Deleting the cloned github/rest-api-description repo..." diff --git a/Dockerfile b/Dockerfile index 70c347c3aef9..1a5ee7b1c2d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ # --------------------------------------------------------------- # To update the sha: # https://github.com/github/gh-base-image/pkgs/container/gh-base-image%2Fgh-base-noble -FROM ghcr.io/github/gh-base-image/gh-base-noble:20260727-152635-gd2e4a1fa6@sha256:22e3a406a3f0f9bf6d3544ce4189bb947e467330bbe7210af5ecc727232a569c AS base +FROM ghcr.io/github/gh-base-image/gh-base-noble:20260729-114251-gd3f68777e@sha256:3bcf6ef4f1eb8e94d6c61c02b82a78140cc2d3c558ba83c68b8f168c5d678a16 AS base # Install curl for Node install and determining the early access branch # Install git for cloning docs-early-access & translations repos diff --git a/content/actions/how-tos/manage-runners/larger-runners/manage-larger-runners.md b/content/actions/how-tos/manage-runners/larger-runners/manage-larger-runners.md index d0a849cb1d53..878defde0c09 100644 --- a/content/actions/how-tos/manage-runners/larger-runners/manage-larger-runners.md +++ b/content/actions/how-tos/manage-runners/larger-runners/manage-larger-runners.md @@ -227,3 +227,38 @@ The number of available IP addresses in the assigned ranges does not restrict th {% data reusables.actions.select-a-larger-runner %} {% data reusables.actions.networking-for-larger-runners %} {% endif %} + +## Azure Storage firewall considerations + +### Virtual machines and storage accounts in the same region + +If you use Azure Storage accounts protected by network rules, be aware that traffic from {% data variables.actions.hosted_runner %}s' VMs to storage accounts in the same Azure region uses private Azure IP addresses rather than the {% data variables.actions.hosted_runner %}s' public IP range. + +As a result, Azure Storage firewall rules that rely only on runner public IP allowlists might not work as expected. This can cause connectivity failures that appear as 403 (AuthorizationFailure) responses, with an error message similar to: + +```text +The request may be blocked by network rules of storage account. Please check network rule set using 'az storage account show -n accountname --query networkRuleSet'. + If you want to change the default action to apply when no rule matches, please use 'az storage account update'. +``` + +For more information see the Microsoft documentation for [Guidelines and limitations for the Azure Storage firewall](https://learn.microsoft.com/en-us/azure/storage/common/storage-network-security-limitations) and [Configure network routing preference for Azure Storage](https://learn.microsoft.com/en-us/azure/storage/common/configure-network-routing-preference?tabs=azure-portal&source=docs). + +> [!NOTE] +> We don't recommend configuring Azure Storage firewall network rules for {% data variables.actions.hosted_runner %}s unless you use either `static public IP ranges` or an `Azure VNet`. +> Public IP ranges can be dynamic, so allowlist-based rules may break and cause intermittent connectivity failures. +> See [AUTOTITLE](/actions/reference/runners/larger-runners#networking-for-larger-runners) + +### Use Static IP Ranges and Service Endpoints + +One option for safely enabling Storage Account network rules is to use runners with static IPs and request support for configuring Azure Storage service endpoints for the virtual network hosting those static IPs. See [Azure virtual network service endpoints](https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoints-overview) for more information. + +Contact GitHub Support to set up this configuration through the [GitHub Support portal](https://support.github.com/). + +### Configure Azure VNET + +Another option to safely connect to Azure Storage accounts is to enable Azure VNET with {% data variables.product.company_short %}-hosted runners. + +* [AUTOTITLE](/organizations/managing-organization-settings/about-azure-private-networking-for-github-hosted-runners-in-your-organization) +{% ifversion ghec %} +* [AUTOTITLE](/admin/configuring-settings/configuring-private-networking-for-hosted-compute-products/about-azure-private-networking-for-github-hosted-runners-in-your-enterprise) +{% endif %} diff --git a/content/admin/concepts/enterprise-fundamentals/teams-in-an-enterprise.md b/content/admin/concepts/enterprise-fundamentals/teams-in-an-enterprise.md index 2b7e09f9c847..8bd8c54c7179 100644 --- a/content/admin/concepts/enterprise-fundamentals/teams-in-an-enterprise.md +++ b/content/admin/concepts/enterprise-fundamentals/teams-in-an-enterprise.md @@ -7,7 +7,7 @@ shortTitle: Teams redirect_from: - /admin/overview/about-teams - /enterprise-onboarding/setting-up-organizations-and-teams/managing-organization-members - - /enterprise-onboarding/setting-up-organizations-and-teams/about-teams-in-an-enterprise + - /enterprise-onboarding/setting-up-organizations-and-teams/about-teams-in-an-enterprise contentType: concepts category: - Get started with GitHub Enterprise @@ -52,11 +52,13 @@ To simplify administration at scale, {% data variables.product.company_short %} You may need to create organization teams if the functionality you need is not covered by enterprise teams. The limitations listed below reflect the current capabilities of enterprise teams and may change over time. +## What can enterprise teams do? + {% data reusables.enterprise.enterprise-teams-can %} {%- ifversion enterprise-teams-ga %} -To @-mention an enterprise team, or request a review from the team, use the team's slug in the format `@/ent:TEAM-SLUG`. {% data variables.product.github %} generates the slug from the team's name and adds the `ent:` prefix, so an enterprise team named `Platform SRE` has the slug `ent:platform-sre`. +To @-mention an enterprise team, or request a review from the team, use the team's slug in the format `@/ent:TEAM-SLUG`. {% data variables.product.github %} generates the slug from the team's name and adds the `ent:` prefix, so an enterprise team named `Platform SRE` has the slug `ent:platform-sre`. To mention the team from an organization it is assigned to, such as `octo-org`, use `@octo-org/ent:platform-sre`. You can mention an enterprise team from any organization the team is assigned to. diff --git a/content/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/create-enterprise-teams.md b/content/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/create-enterprise-teams.md index 4aaffb82d6d0..78808134811c 100644 --- a/content/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/create-enterprise-teams.md +++ b/content/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/create-enterprise-teams.md @@ -85,11 +85,11 @@ For example: {% else %} -## 4. Assign licenses +## 4. Grant access to {% data variables.product.prodname_copilot_short %} -You can assign {% data variables.product.prodname_copilot %} licenses to an enterprise team. This allows you to manage {% data variables.product.prodname_copilot_short %} access through team membership, independent of organizations. Once you have assigned licenses to a team, users will gain or lose access to {% data variables.product.prodname_copilot_short %} when they are added or removed from the team. +You can assign {% data variables.product.prodname_copilot %} licenses to an enterprise team. This allows you to manage {% data variables.product.prodname_copilot_short %} access through team membership, independent of organizations. Once you have assigned licenses to a team, users will gain or lose access to {% data variables.product.prodname_copilot_short %} when they are added or removed from the team. For instructions, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access/grant-access#assigning-licenses-to-users-or-teams). -For instructions, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access/grant-access#assigning-licenses-to-users-or-teams). +As an opt-in preview, you can also grant enterprise teams access to specific {% data variables.product.prodname_copilot_short %} models. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-availability-of-default-models). ## 5. Assign roles diff --git a/content/admin/monitoring-and-managing-your-instance/configuring-clustering/replacing-a-cluster-node.md b/content/admin/monitoring-and-managing-your-instance/configuring-clustering/replacing-a-cluster-node.md index 7015a60e6e51..6e2ac0339274 100644 --- a/content/admin/monitoring-and-managing-your-instance/configuring-clustering/replacing-a-cluster-node.md +++ b/content/admin/monitoring-and-managing-your-instance/configuring-clustering/replacing-a-cluster-node.md @@ -207,12 +207,38 @@ If you need to allocate more resources to your primary MySQL (or MySQL and MSSQL /usr/local/share/enterprise/ghe-mssql-repl-promote ``` - This will attempt to access the current primary MSSQL node and perform a graceful failover + This will attempt to access the current primary MSSQL node and perform a graceful failover. + +1. If the new node will also become the primary Redis node, confirm that the new node is a healthy, caught-up Redis replica before you continue. From any node in the cluster, run the following command. + + ```shell copy + ghe-cluster-status-redis -v + ``` + + Confirm that the new node's entry reports `ok` and `Redis replication is in sync`, and that the current primary Redis node's entry also reports `ok`. + + > [!WARNING] + > Do not set `redis-master` to a node that is not a caught-up replica. If you do, the cluster can reconfigure the current primary Redis node as a replica of the new node and discard any data that hasn't replicated yet. + + `ghe-cluster-status-redis` reports sync freshness, not exact replication offsets. Immediately before you edit `redis-master` in the next step, look up the current primary Redis node's hostname. Because `mysql-master` and `redis-master` are configured independently, the current primary Redis node isn't necessarily the database node you're replacing. + + ```shell copy + ghe-config cluster.redis-master + ``` + + Then compare offsets directly, replacing `NEW-NODE-HOSTNAME` with the hostname of the new node and `CURRENT-REDIS-MASTER-HOSTNAME` with the value from the previous command. Check the new node first, then the current primary Redis node, so that a match reflects the primary's most recent state. + + ```shell copy + ghe-redis-cli --remote -h NEW-NODE-HOSTNAME INFO replication + ghe-redis-cli --remote -h CURRENT-REDIS-MASTER-HOSTNAME INFO replication + ``` + + Confirm that the new node's `slave_repl_offset` value matches the current primary Redis node's `master_repl_offset` value. If the values don't match, wait and check again. Do not continue until the offsets match. 1. After the GTIDs on the primary and replica MySQL nodes match, update the cluster configuration by opening the cluster configuration file at `/data/user/common/cluster.conf` in a text editor. * Create a backup of the `cluster.conf` file before you edit the file. - * In the top-level `[cluster]` section, remove the hostname for the node you replaced from the `mysql-master` key-value pair, then assign the new node instead. If the new node is also a primary Redis node, adjust the `redis-master` key-value pair. + * In the top-level `[cluster]` section, remove the hostname for the node you replaced from the `mysql-master` key-value pair, then assign the new node instead. If the new node is also a primary Redis node, adjust the `redis-master` key-value pair only after the replication check in the previous step confirms the offsets match. * If {% data variables.product.prodname_actions %} is enabled in the cluster, you will have to include the `mssql-server = true` key-value pair as well.
@@ -233,5 +259,14 @@ If you need to allocate more resources to your primary MySQL (or MySQL and MSSQL
/usr/local/share/enterprise/ghe-repl-post-failover-mssql
```
+1. If you changed `redis-master`, confirm that the new primary Redis node is serving traffic and that the former primary Redis node has reconfigured as a healthy replica. Run the following commands.
+
+ ```shell copy
+ ghe-redis-cli PING
+ ghe-cluster-status-redis -v
+ ```
+
+ Confirm that `ghe-redis-cli PING` returns `PONG` through the default HAProxy Redis endpoint, the new node's entry reports `ok`, and the former primary Redis node's entry reports `ok` and `Redis replication is in sync`.
+
1. Check the status of the MySQL(or MySQL and MSSQL) replication from any node in the cluster by running `ghe-cluster-status -v`.
1. When the MySQL(or MySQL and MSSQL) replication is finished, from any node in the cluster, disable maintenance mode. See [AUTOTITLE](/admin/administering-your-instance/configuring-maintenance-mode/enabling-and-scheduling-maintenance-mode#enabling-or-disabling-maintenance-mode-for-all-nodes-in-a-cluster-via-the-cli).
diff --git a/content/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens.md b/content/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens.md
index 99e3834bcbc9..eed00bf0b648 100644
--- a/content/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens.md
+++ b/content/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens.md
@@ -142,7 +142,6 @@ Below are some example URLs that generate the tokens we see most often:
* [Read repository contents](https://github.com/settings/personal-access-tokens/new?name=Repo-reading+token&description=Just+contents:read&contents=read)
* [Push access to repositories](https://github.com/settings/personal-access-tokens/new?name=Repo-writing+token&description=Just+contents:write&contents=write)
-* [{% data variables.product.prodname_github_models %} access](https://github.com/settings/personal-access-tokens/new?name=GitHub+Models+token&description=Used%20to%20call%20GitHub%20Models%20APIs%20to%20easily%20run%20LLMs%3A%20https%3A%2F%2Fdocs.github.com%2Fgithub-models%2Fquickstart%23step-2-make-an-api-call&user_models=read)
* [Update code and open a pull request](https://github.com/settings/personal-access-tokens/new?name=Core-loop+token&description=Write%20code%20and%20push%20it%20to%20main%21%20Includes%20permission%20to%20edit%20workflow%20files%20for%20Actions%20-%20remove%20%60workflows%3Awrite%60%20if%20you%20don%27t%20need%20to%20do%20that&contents=write&pull_requests=write&workflows=write)
* [Manage {% data variables.product.prodname_copilot_short %} licenses in an organization](https://github.com/settings/personal-access-tokens/new?name=Core-loop+token&description=Enable%20or%20disable%20copilot%20access%20for%20users%20with%20the%20Seat%20Management%20APIs%3A%20https%3A%2F%2Fdocs.github.com%2Frest%2Fcopilot%2Fcopilot-user-management%0ABe%20sure%20to%20select%20an%20organization%20for%20your%20resource%20owner%20below%21&organization_copilot_seat_management=write)
* [Make {% data variables.product.prodname_copilot_short %} requests](https://github.com/settings/personal-access-tokens/new?name=Copilot+requests+token&description=Make%20Copilot%20API%20requests%20on%20behalf%20of%20the%20user%2C%20consuming%20premium%20requests%3A%20https%3A%2F%2Fdocs.github.com%2Fcopilot%2Fconcepts%2Fbilling%2Fcopilot-requests&user_copilot_requests=read)
diff --git a/content/billing/concepts/product-billing/github-models.md b/content/billing/concepts/product-billing/github-models.md
deleted file mode 100644
index 3ee361604354..000000000000
--- a/content/billing/concepts/product-billing/github-models.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-title: GitHub Models billing
-shortTitle: GitHub Models
-intro: 'If you want to use {% data variables.product.prodname_github_models %} beyond the free usage included in your account, you can choose to opt in to paid usage.'
-versions:
- feature: github-models
-redirect_from:
- - /billing/managing-billing-for-your-products/about-billing-for-github-models
-contentType: concepts
-category:
- - Understand product costs
----
-
-> [!NOTE]
-> * {% data variables.product.prodname_github_models %} for organizations and repositories is in {% data variables.release-phases.public_preview %} and subject to change.
-> * Billing for {% data variables.product.prodname_github_models %} is separate from billing for {% data variables.product.prodname_copilot %}. For more information about how models in {% data variables.product.prodname_copilot %} are billed, see [AUTOTITLE](/billing/concepts/product-billing/github-copilot-licenses).
-
-## How use of {% data variables.product.prodname_github_models %} is measured
-
-Each {% data variables.product.github %} account receives a certain amount of included **free but rate-limited** usage of {% data variables.product.prodname_github_models %}, see [Rate limits](/github-models/use-github-models/prototyping-with-ai-models#rate-limits).
-
-For usage beyond the free quota, the cost is calculated by multiplying the number of **token units** you use by the unified token unit price.
-
-The number of model requests and tokens you have used is reset after each billing cycle.
-
-### Token units
-
-A token unit is calculated by multiplying the number of input and output tokens by their respective model multipliers. All model usage, regardless of the underlying provider or model, is measured in token units. While some providers display prices per 1,000 or per 1,000,000 tokens, {% data variables.product.prodname_github_models %} standardizes billing to the token unit level. This means you are billed using a single SKU and a unified price per token unit, no matter which supported model you use. See [AUTOTITLE](/billing/reference/costs-for-github-models).
-
-### Example calculation
-
-The following table displays how the total cost is calculated for a request using OpenAI GPT-4o:
-
-| Model | Input tokens used | Output tokens used | Input multiplier | Output multiplier | Total token units | Price per token unit | Total cost |
-|---------------| ----------------- | ------------------ | ---------------- | ----------------- |-------------------|----------------------|------------|
-| OpenAI GPT-4o | 1,000,000 | 1,000,000 | 0.25 | 1 | 1,250,000 | $0.00001 | $12.50 |
-
-The following steps demonstrate how the total cost is calculated:
-
-1. **Calculate input tokens:**
- Multiply the number of input tokens by the input multiplier.
- `1,000,000 tokens × 0.25 = 250,000 input token units`
-
-1. **Calculate billable output tokens:**
- Multiply the number of output tokens by the output multiplier.
- `1,000,000 tokens × 1 = 1,000,000 output token units`
-
-1. **Add billable tokens:**
- Add the billable input and output tokens.
- `250,000 (input) + 1,000,000 (output) = 1,250,000 total token units`
-
-1. **Charges by type:**
- * **Input charge:** `250,000 × $0.00001 = $2.50`
- * **Output charge:** `1,000,000 × $0.00001 = $10.00`
-
-1. **Calculate the total cost:**
- Multiply the total token units by the token unit price.
- `1,250,000 × $0.00001 = $12.50 for this request`
-
-## Free use of {% data variables.product.prodname_github_models %}
-
-All {% data variables.product.github %} accounts have rate-limited access to {% data variables.product.prodname_github_models %} at no cost. These limits vary by model and are designed to support prototyping and experimentation. Limits also vary according to your {% data variables.product.prodname_copilot %} plan.
-
-Free usage includes:
-* Access to all supported models in the catalog
-* Rate-limited requests per model
-* Usage from the {% data variables.product.prodname_marketplace %} catalog
-
-For full details of rate limits and quotas, see [Rate limits](/github-models/use-github-models/prototyping-with-ai-models#rate-limits).
-
-> [!TIP]
-> If you use custom models from third-party providers with your own API keys, there is no impact on your bill in {% data variables.product.github %}. See [AUTOTITLE](/github-models/github-models-at-scale/using-your-own-api-keys-in-github-models).
-
-## Using more than your included quota
-
-If your account does not have a valid payment method on file or paid use is not enabled for your account, usage is blocked once you use up your quota.
-
-### Opting in or out of paid usage
-
-{% data variables.product.prodname_github_models %} billing is disabled by default for enterprises and organizations. An enterprise must enable paid usage before any organization within it can opt in to billing. Once an enterprise or organization has opted in to paid usage, the billing is enabled for all repositories owned by the enterprise or organization, including repositories owned by {% data variables.product.prodname_emus %} (EMUs).
-
-For personal repositories, a user's own settings determine whether paid usage is enabled, unless the user is managed by an enterprise (EMU). In that case, the enterprise's settings apply.
-
-* [AUTOTITLE](/github-models/github-models-at-scale/manage-models-at-scale)
-* [AUTOTITLE](/github-models/about-github-models#enabling-github-models)
-
-> [!NOTE]
-> If an enterprise has opted in to billing for {% data variables.product.prodname_github_models %}, but an organization within the enterprise has opted out of billing, then paid {% data variables.product.prodname_github_models %} usage is disabled for the organization, including for repositories owned by {% data variables.product.prodname_emus %} and the enterprise.
-
-## Paying for {% data variables.product.prodname_github_models %} use
-
-You pay for additional use of {% data variables.product.prodname_github_models %} with the payment method set up for your {% data variables.product.github %} account. See [AUTOTITLE](/billing/how-tos/set-up-payment/manage-payment-info).
-
-{% data variables.product.prodname_github_models %} pricing is based on the number of token units used, at a fixed price of $0.00001 USD per token unit.
-
-At the end of your billing cycle, {% data variables.product.github %} calculates the cost of token units used, starting from your first request after opting in to paid usage. See [AUTOTITLE](/billing/how-tos/products/view-productlicense-use).
-
-{% data variables.product.prodname_github_models %} usage can be paid for by one or more of the following methods:
-
-* For enterprises, organizations, or personal accounts directly billed by {% data variables.product.github %}, the billing of {% data variables.product.prodname_github_models %} is based on your metered usage for each billing period, and pricing varies by the number of model requests, tokens, and the model multiplier.
- * For invoiced accounts, contact {% data variables.contact.contact_enterprise_sales %} to discuss billing for {% data variables.product.prodname_github_models %} usage.
-* Accounts with an existing Azure subscription can use that subscription to pay for model inference by bringing their own API key for custom models. In this case, billing is based on the model provider’s pricing and is managed through the Azure subscription. See [AUTOTITLE](/github-models/github-models-at-scale/using-your-own-api-keys-in-github-models).
-
-You are considered to be directly billed by {% data variables.product.github %} if you pay for {% data variables.product.github %} using a credit card, PayPal, or by invoice.
-
-## Managing your budget for {% data variables.product.prodname_github_models %}
-
-{% data reusables.github-models.production-rate-limits-note %}
-
-Enterprises and organizations can opt in to paid usage to access expanded model capabilities, including increased request allowances and larger context windows. You can manage their spending by setting a budget.
-
-Enterprises, organizations and personal accounts may have default budgets to limit spending. Check the budgets for your account to ensure they are appropriate for your usage needs.
-
-For more information, see [AUTOTITLE](/billing/how-tos/set-up-budgets).
-
-## Further reading
-
-* [AUTOTITLE](/github-models/about-github-models)
-* [AUTOTITLE](/github-models/github-models-at-scale/manage-models-at-scale)
diff --git a/content/billing/concepts/product-billing/index.md b/content/billing/concepts/product-billing/index.md
index ed6d015f8033..dcd3aabe467f 100644
--- a/content/billing/concepts/product-billing/index.md
+++ b/content/billing/concepts/product-billing/index.md
@@ -13,7 +13,6 @@ children:
- /github-code-quality
- /github-copilot-billing
- /github-copilot-licenses
- - /github-models
- /github-packages
- /cloud-and-local-sandboxes
- /git-lfs
diff --git a/content/billing/reference/costs-for-github-models.md b/content/billing/reference/costs-for-github-models.md
deleted file mode 100644
index 0b163947579f..000000000000
--- a/content/billing/reference/costs-for-github-models.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: Costs and multipliers for using GitHub Models directly
-shortTitle: Costs for GitHub Models
-intro: Reference information for calculating the cost of using different {% data variables.product.prodname_github_models %} directly (outside {% data variables.product.prodname_copilot %}).
-versions:
- feature: github-models
-contentType: reference
-redirect_from:
- - /billing/reference/models-multipliers-and-costs
-category:
- - Understand product costs
----
-
-## Use of models in {% data variables.product.github %}
-
-The information in this article is for the direct use of {% data variables.product.prodname_github_models %}.
-
-{% data variables.product.github %} supports using models in two additional ways.
-
-* {% data variables.product.prodname_copilot %} uses models to perform its work, see [AUTOTITLE](/copilot/reference/copilot-billing/request-based-billing-legacy/copilot-requests#model-multipliers)
-* If you use models provided by other companies, see [AUTOTITLE](/github-models/github-models-at-scale/using-your-own-api-keys-in-github-models)
-
-## Multipliers and costs for direct use of {% data variables.product.prodname_github_models %}
-
-The table below lists the currently available models. Each model supported by {% data variables.product.prodname_github_models %} has an input and output multiplier that determines the number of token units for each request. For more information on token units, see [AUTOTITLE](/billing/concepts/product-billing/github-models).
-
-| Model name | Input multiplier | Cached input multiplier | Output multiplier | Input price (per 1M token units) | Cached input price (per 1M token units) | Output price (per 1M token units) |
-| --------------------------------- | ---------------- | ----------------------- | ----------------- |----------------------------------|-----------------------------------------|-----------------------------------|
-| OpenAI GPT-4o | 0.25 | 0.125 | 1.0 | $2.50 | $1.25 | $10.00 |
-| OpenAI GPT-4o mini | 0.015 | 0.0075 | 0.06 | $0.15 | $0.08 | $0.60 |
-| OpenAI GPT-4.1-mini | 0.04 | 0.01 | 0.16 | $0.40 | $0.10 | $1.60 |
-| OpenAI GPT-4.1 | 0.2 | 0.05 | 0.8 | $2.00 | $0.50 | $8.00 |
-| Phi-4 | 0.0125 | N/A | 0.05 | $0.13 | N/A | $0.50 |
-| Phi-4-mini-instruct | 0.0075 | N/A | 0.03 | $0.08 | N/A | $0.30 |
-| Phi-4-multimodal-instruct | 0.008 | N/A | 0.032 | $0.08 | N/A | $0.32 |
-| DeepSeek-R1 | 0.135 | N/A | 0.54 | $1.35 | N/A | $5.40 |
-| DeepSeek-R1-0528 | 0.135 | N/A | 0.54 | $1.35 | N/A | $5.40 |
-| DeepSeek-V3-0324 | 0.114 | N/A | 0.456 | $1.14 | N/A | $4.56 |
-| MAI-DS-R1 | 0.135 | N/A | 0.54 | $1.35 | N/A | $5.40 |
-| Grok 3 Mini | 0.025 | N/A | 0.127 | $0.25 | N/A | $1.27 |
-| Grok 3 | 0.3 | N/A | 1.5 | $3.00 | N/A | $15.00 |
-| Llama 4 Maverick 17B Instruct FP8 | 0.025 | N/A | 0.1 | $0.25 | N/A | $1.00 |
-| Llama-3.3-70B-Instruct | 0.071 | N/A | 0.071 | $0.71 | N/A | $0.71 |
diff --git a/content/billing/reference/index.md b/content/billing/reference/index.md
index d6a0bbf9bac3..cdf2a62778a7 100644
--- a/content/billing/reference/index.md
+++ b/content/billing/reference/index.md
@@ -13,7 +13,6 @@ children:
- /billing-reports
- /billing-roles
- /cost-center-allocation
- - /costs-for-github-models
- /enterprise-license-troubleshooting
- /github-license-users
- /license-reports
diff --git a/content/copilot/concepts/models/default-availability.md b/content/copilot/concepts/models/default-availability.md
index 8f37edc49973..a5911f838f9d 100644
--- a/content/copilot/concepts/models/default-availability.md
+++ b/content/copilot/concepts/models/default-availability.md
@@ -17,7 +17,7 @@ On {% data variables.copilot.copilot_business_short %} and {% data variables.cop
-To give you time to prepare, this policy can be configured but **does not currently affect model availability**. On August 26, 2026, new GA models and existing unconfigured GA models will automatically follow the default set in the policy. These are models that you have not explicitly chosen a setting for. They will be labeled as "inherits default" in the UI.
+To give you time to prepare, this policy can be configured but **does not currently affect model availability**. On August 26, 2026, new GA models and existing unconfigured GA models will automatically follow the default set in the policy. These are models that you have not explicitly chosen a setting for. They will be relabeled as "inherits default" in the UI.
To prepare for this change, you can disable the policy or explicitly disable models you don't want to be enabled.
diff --git a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-availability-of-default-models.md b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-availability-of-default-models.md
index dbccdb8e05e5..7cfd49e713f1 100644
--- a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-availability-of-default-models.md
+++ b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-availability-of-default-models.md
@@ -1,7 +1,7 @@
---
title: Managing availability of models in your enterprise
shortTitle: Manage model availability
-intro: 'You can control which {% data variables.product.prodname_copilot_short %} models are available to specific organizations.'
+intro: 'Control which {% data variables.product.prodname_copilot_short %} models are available to users.'
versions:
feature: copilot
contentType: how-tos
@@ -10,40 +10,92 @@ product: '{% data variables.copilot.copilot_enterprise_short %} or {% data varia
allowTitleToDifferFromFilename: true
---
-## About managing model availability
+As an enterprise owner, you can manage which {% data variables.product.prodname_copilot_short %} models are available to people in your enterprise.
-As an enterprise owner, you can manage which {% data variables.product.prodname_copilot_short %} models are available to organizations within your enterprise. For each model, you can choose whether it is automatically enabled for all organizations or whether individual organizations can choose to enable it.
+An enterprise owner can enable or disable models for everyone in the enterprise. Alternatively, there are two different modes for controlling granular access to models: organizations and enterprise teams.
+
+By default, models that are set to "optional" at the enterprise level are available for organizations to set to enabled or disabled. Enterprise owners can also create model rules to enable or disable models in organizations directly.
> [!IMPORTANT] {% data reusables.copilot.model-autoenablement %}
-## Navigating to your model policies
+## About the enterprise teams model access preview
+
+As an opt-in preview, enterprises can switch to controlling granular model access exclusively through enterprise teams. This gives you more control over model access based on business needs, roles, or levels of training.
+
+## Setting a baseline for model access
-From the model configuration page, you can enable or disable specific models. You can also configure the **Default availability for released models** policy to choose the default status of unconfigured models.
+Regardless of whether you are opted in to the preview, you should explicitly configure all models that should be either enabled or disabled for everyone. For example, everyone in your company might get access to vetted, low-cost models, whereas some models might be disabled everywhere for compliance reasons.
+
+This sets a baseline that you can add to with more granular controls. For models that only some people should get access to, set them to "optional." Then, you will be able to grant access to specific organizations or enterprise teams, depending on your settings.
{% data reusables.enterprise-accounts.access-enterprise %}
{% data reusables.enterprise-accounts.ai-controls-tab %}
{% data reusables.enterprise-accounts.copilot-sidebar %}
{% data reusables.enterprise-accounts.configure-allowed-models %}
+1. Above the list of models, click **Add models**.
+1. In the modal, select or deselect the checkboxes next to the models you want to make available or remove.
+1. Click **Save**.
+1. Select a status for each model in the list:
-## Enabling or disabling models
+ * **Enabled**: Enabled for everyone.
+ * **Disabled**: Explicitly disabled for everyone.
+ * **Optional**: You can choose whether to enable the model for specific organizations or enterprise teams.
-You should explicitly configure all models for which you want to set a policy. Any models that are not in your models list, or that are set to **Optional** and not explicitly configured by organization owners, will inherit the default specified in the **Default availability for released models** policy.
+## Granting access to specific organizations (default)
-Select a status for each model in the list:
+This section applies if you are **not** opted in to the enterprise teams model access preview.
-* **Enabled**: Enabled for everyone, cannot be disabled by organizations.
-* **Disabled**: Explicitly disabled for everyone, cannot be enabled by organizations.
-* **Optional**: Organizations can choose whether to enable or disable it. If left unconfigured by an organization, defaults to enabled or disabled depending on the organization's **Default availability for released models** policy setting.
+To allow each organization to make its own decision about a model, set it to **Optional** in your enterprise's model list. Organization owners can then choose whether to enable or disable the model. If left unconfigured by an organization, the model will follow the organization's **Default availability for released models** policy setting.
-## Granting access to specific organizations
+As an alternative to delegating control to organizations, targeted model rules let you control exactly which models are available to specific organizations, giving you more granular control than the enterprise-wide availability settings.
-Targeted model rules let you control exactly which models are available to specific organizations, giving you more granular control than the enterprise-wide availability settings.
+### Creating a model policy
1. In the "Targeted model rules" section, click **Create access rule**.
1. Next to "Target organizations", click **Add organizations**, then select the organizations you want the rule to apply to.
1. Under "Allowed models", click **Add models**, then select the models you want to make available to the selected organizations and click **Save**.
1. Click **Create rule**.
+## Granting access to enterprise teams (opt-in preview)
+
+Once you are opted in to the preview, organization-level model settings will be deactivated. Organization owners can no longer manage model policies. Instead, individual models can be enabled for specific enterprise teams.
+
+You can roll back from enterprise teams mode while the feature is in preview. This returns your enterprise to its previous policy state before you opted in. Any changes to enterprise-level model policies made after switching to enterprise teams mode will not be preserved after rollback.
+
+Model settings for enterprise teams are additive to your enterprise's model settings:
+
+* If the enterprise has disabled a model, it cannot be enabled for a team.
+* If the enterprise has enabled a model, it is always enabled for teams.
+* A team can receive access to additional models on top of the enterprise baseline.
+* If a user belongs to multiple enterprise teams, they receive access to all models enabled by the enterprise and across all of their enterprise teams. As long as one of their enterprise teams enables a model, the user gets access to it.
+* There is no option to explicitly set a model to "disabled" for a team in the team's settings. "Optional" in the team's settings means the model is not currently enabled for the team.
+
+### Preparing to migrate
+
+Before opting in to the preview, we recommend you create enterprise teams and begin recreating and enhancing your existing organization-based setup. With teams, you have more scope to map model access to business needs. For example, higher-cost models might be enabled for development teams or people who have received specific training.
+
+For each team, you can use the **default models** tab to configure the model access that the team will receive. These settings do not apply until you opt in to the preview.
+
+Make sure your new setup will not cause regressions for users. Although models that are explicitly "enabled" or "disabled" at the enterprise level will keep those settings once you opt in to the preview, models that are "optional" or unconfigured will be unavailable by default until they are enabled for specific teams. Filter your enterprise's model policy page by status to identify these models and choose which teams will receive access to them.
+
+For information on creating teams, see [AUTOTITLE](/enterprise-cloud@latest/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/create-enterprise-teams).
+
+### Opting in to the preview
+
+{% data reusables.enterprise-accounts.access-enterprise %}
+{% data reusables.enterprise-accounts.ai-controls-tab %}
+1. In the sidebar, click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %} **{% data variables.product.prodname_copilot_short %}**.
+1. Next to **Enterprise teams mode**, click the toggle.
+
+### Granting access to teams
+
+To grant access to an enterprise team:
+
+1. Ensure models you want to enable for the team are set to "optional" in your enterprise's model policies.
+1. Access the settings for the team. See [AUTOTITLE](/enterprise-cloud@latest/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/create-enterprise-teams).
+1. Click the **Default models** tab.
+1. For each model that the team should receive access to beyond the enterprise baseline, set the dropdown to **Enabled**.
+
## Further reading
* [AUTOTITLE](/copilot/reference/supported-surfaces-for-policies)
diff --git a/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models.md b/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models.md
index b950066aa87e..98c5a7372163 100644
--- a/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models.md
+++ b/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models.md
@@ -12,6 +12,8 @@ category:
allowTitleToDifferFromFilename: true
---
+> [!IMPORTANT] If your enterprise has opted in to the **enterprise teams model access** preview, your organization will not be able to access model settings. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-availability-of-default-models).
+
## Which models can I configure?
If your organization is part of an enterprise, the enterprise owner controls which {% data variables.product.prodname_copilot_short %} models are available and how they can be configured at the organization level.
diff --git a/content/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models.md b/content/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models.md
index 2ef09456fc2e..bbe9ecc59093 100644
--- a/content/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models.md
+++ b/content/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models.md
@@ -32,7 +32,7 @@ For individual {% data variables.product.prodname_copilot_short %} plans, you ca
## Setup for organization and enterprise plans
-As an enterprise or organization owner, you can enable or disable access to AI models for members with a {% data variables.copilot.copilot_enterprise_short %} or {% data variables.copilot.copilot_business_short %} seat. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies).
+As an enterprise or organization owner, you can enable or disable access to AI models for members with a {% data variables.copilot.copilot_enterprise_short %} or {% data variables.copilot.copilot_business_short %} seat. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-availability-of-default-models) or [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models).
## Custom models
diff --git a/content/copilot/reference/enterprise-managed-settings-reference.md b/content/copilot/reference/enterprise-managed-settings-reference.md
index a401d44b222c..155b8c7ccd34 100644
--- a/content/copilot/reference/enterprise-managed-settings-reference.md
+++ b/content/copilot/reference/enterprise-managed-settings-reference.md
@@ -34,7 +34,7 @@ When multiple settings sources are present, settings earlier in this list take p
| `extraKnownMarketplaces` | Adds plugin marketplaces that users can access | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} |
| `strictKnownMarketplaces` | Restricts plugin installation to explicitly listed marketplaces | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} |
| `telemetry` | Configures OpenTelemetry export, routing {% data variables.product.prodname_copilot_short %} usage data to a collector of your choice | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} |
-| `remoteControl` | Restricts whether sessions hosted on this device can be remotely controlled, based on the controlling client's SSO authorization status for the listed organizations. Doesn't affect the user's ability to remotely control sessions hosted on other devices | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} |
+| `remoteControl` | Restricts whether sessions hosted on this device can be remotely controlled, based on the controlling client's SSO authorization status for the listed organizations. Doesn't affect the user's ability to remotely control sessions hosted on other devices | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} |
{% endrowheaders %}
@@ -150,7 +150,7 @@ When you set the `telemetry` property, {% data variables.product.prodname_copilo
## `remoteControl`
-Restricts whether {% data variables.copilot.copilot_cli_short %} sessions hosted on a device can be remotely controlled. This doesn't affect a user's ability to remotely control their sessions hosted on other devices.
+Restricts whether {% data variables.product.prodname_copilot_short %} sessions hosted on a device can be remotely controlled. This doesn't affect a user's ability to remotely control their sessions hosted on other devices.
* `mode`: Set to `"disabled"` to prevent remote control of sessions on the device, `"requireSSO"` to only allow remote control from a client that is SSO-authorized for the organizations listed in `githubDotComOrganizations`, or `"enabled"` to allow it unrestricted.
* `githubDotComOrganizations`: An array of organization logins. Required when `mode` is `"requireSSO"`.
diff --git a/content/copilot/reference/policy-conflicts.md b/content/copilot/reference/policy-conflicts.md
index 5e3abdeda224..78044efb89d1 100644
--- a/content/copilot/reference/policy-conflicts.md
+++ b/content/copilot/reference/policy-conflicts.md
@@ -50,7 +50,6 @@ Feature, model, and privacy settings for users are set according to the **least
| {% data variables.copilot.copilot_cli_short %} | Least restrictive organization | [AUTOTITLE](/copilot/responsible-use/agents) |
| {% data variables.copilot.github_copilot_app %} | Least restrictive organization | [AUTOTITLE](/copilot/concepts/agents/github-copilot-app) |
| Editor preview features | Least restrictive organization | [AUTOTITLE](/free-pro-team@latest/site-policy/github-terms/github-pre-release-license-terms) |
-| {% data variables.product.prodname_github_models %}, one policy per model | Least restrictive organization | [AUTOTITLE](/github-models/github-models-at-scale/manage-models-at-scale) |
| MCP servers in {% data variables.product.prodname_copilot_short %} | Least restrictive organization | [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/configure-mcp-servers) |
| {% data variables.product.prodname_copilot_short %}-generated commit messages | Least restrictive organization | [AUTOTITLE](/copilot/responsible-use/chat) |
diff --git a/content/copilot/responsible-use/agents.md b/content/copilot/responsible-use/agents.md
index f2bef535f42e..6ec40a2541df 100644
--- a/content/copilot/responsible-use/agents.md
+++ b/content/copilot/responsible-use/agents.md
@@ -118,7 +118,7 @@ Copilot CLI uses a large language model to reason about tasks, generate code, mo
The Copilot SDK communicates with Copilot CLI over JSON-RPC, using the same underlying models and capabilities. Applications built with the SDK use the same models available to the authenticated Copilot user or organization. Developers can also bring their own API keys (BYOK) to use custom model providers.
{% ifversion spark %}
-GitHub Spark uses a large language model to power its agent within the development environment. The agent writes code and runs commands to build your application. Spark's SDK natively integrates with GitHub Models, allowing your application to incorporate model inference capabilities. For information on the models used by GitHub Models, see [AUTOTITLE](/github-models/responsible-use-of-github-models). Spark does not test the prompts you create within your application for inference—you must ensure that your included capabilities act as intended.
+GitHub Spark uses a large language model to power its agent within the development environment. The agent writes code and runs commands to build your application. Spark does not test the prompts you create within your application for inference—you must ensure that your included capabilities act as intended.
{% endif %}
## 6. Performance
@@ -349,7 +349,6 @@ For additional guidance on the responsible use of Copilot agentic features, we r
* [AUTOTITLE](/copilot/tutorials/spark/your-first-spark)
* [AUTOTITLE](/copilot/tutorials/spark/build-apps-with-spark)
* [AUTOTITLE](/billing/concepts/product-billing/github-spark)
-* [AUTOTITLE](/github-models/responsible-use-of-github-models)
* [AUTOTITLE](/free-pro-team@latest/site-policy/github-terms/github-pre-release-license-terms)
{% endif %}
* [AUTOTITLE](/free-pro-team@latest/site-policy/github-terms/github-terms-for-additional-products-and-features#github-copilot)
diff --git a/content/github-models/about-github-models.md b/content/github-models/about-github-models.md
deleted file mode 100644
index b84ecffb9009..000000000000
--- a/content/github-models/about-github-models.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-title: About GitHub Models
-intro: '{% data variables.product.prodname_github_models %} is a suite of developer tools that take you from AI idea to ship, including a model catalog, prompt management, and quantitative evaluations.'
-versions:
- feature: github-models
-shortTitle: About GitHub Models
-category:
- - Build with AI models
----
-
-{% data reusables.models.models-preview-note %}
-
-## Overview
-
-{% data variables.product.prodname_github_models %} is a workspace lowering the barrier to enterprise-grade AI adoption. It helps you move beyond isolated experimentation by embedding AI development directly into familiar GitHub workflows. {% data variables.product.prodname_github_models %} provides tools to test large language models (LLMs), refine prompts, evaluate outputs, and make informed decisions based on structured metrics. To get started, see [AUTOTITLE](/github-models/use-github-models/optimizing-your-ai-powered-app-with-github-models).
-
-## Capabilities
-
-GitHub Models offers a set of features to support prompt iteration, evaluation, and integration for AI development.
-
-* **Prompt development**: Start AI development directly in a structured editor that supports system instructions, test inputs, and variable configuration.
-* **Model comparison**: Test multiple models side by side with identical prompts and inputs to experiment with different outputs.
-* **Evaluators**: Use scoring metrics such as similarity, relevance, and groundedness to analyze outputs and track performance.
-* **Prompt configurations**: Save prompt, model, and parameter settings as `.prompt.yml` files in your repository. This enables review, collaboration, and reproducibility.
-* **Production integration**: Use your saved configuration to build AI features or connect through SDKs and{% ifversion fpt %} the [{% data variables.product.prodname_github_models %} REST API](/rest/models?apiVersion=2022-11-28). {% else %} APIs. {% endif %}
-
-## Enabling GitHub Models
-
-There are a few ways you can start using {% data variables.product.prodname_github_models %}, depending on your role and needs.
-
-To use the {% data variables.product.prodname_github_models %} API, see [Experimenting with AI models using the API](/github-models/use-github-models/prototyping-with-ai-models#experimenting-with-ai-models-using-the-api).
-
-### For individuals
-
-To use {% data variables.product.prodname_github_models %}, create a new GitHub repository or open an existing one. In the repository settings, click **Models** in the sidebar and enable the feature.
-
-### For organizations and enterprises
-
-To use {% data variables.product.prodname_github_models %} in your organization, an enterprise owner must first enable the feature. Organization owners can then configure which models are allowed.
-
-See [AUTOTITLE](/github-models/github-models-at-scale/manage-models-at-scale).
-
-## Searching {% data variables.product.prodname_github_models %}
-
-To search for available models, see [AUTOTITLE](/search-github/searching-on-github/searching-github-models). You can search for models by name, publisher, language, modality, and other filters.
-
-## Prompts
-
-Manage your prompt configurations stored in the repository. Each prompt is saved as a `.prompt.yml` file, which defines the model, parameters, and test inputs. From here, you can create, edit, and organize prompts to support experimentation or production use.
-
-## Comparisons
-
-Use the Comparisons view to evaluate the outputs of multiple prompt configurations in a consistent, test-driven workflow. Run tests across rows of input data and view evaluator scores for each configuration, such as similarity, relevance, and groundedness. This view is ideal for refining prompts, validating changes, and avoiding regressions.
-
-## Playground
-
-Use the Playground to quickly explore models and test prompt ideas in real time. The Playground is ideal for early experimentation, helping you understand a model’s behavior, capabilities, and response style. You can interactively select models, adjust parameters, and compare responses side by side.
-
-## Billing
-
-For more information about billing for {% data variables.product.prodname_github_models %}, see [AUTOTITLE](/billing/concepts/product-billing/github-models).
-
-## Join the community
-
-To ask questions and share feedback, see this [GitHub Models discussion post](https://github.com/orgs/community/discussions/159087).
-To learn how others are using {% data variables.product.prodname_github_models %}, visit the [GitHub Community discussions for Models](https://github.com/orgs/community/discussions/categories/models).
-
-## Further reading
-
-* [AUTOTITLE](/search-github/searching-on-github/searching-github-models)
-* [AUTOTITLE](/github-models/use-github-models/prototyping-with-ai-models)
-* [AUTOTITLE](/github-models/use-github-models/optimizing-your-ai-powered-app-with-github-models)
-* [AUTOTITLE](/github-models/use-github-models/evaluating-ai-models)
-* [AUTOTITLE](/billing/concepts/product-billing/github-models)
diff --git a/content/github-models/github-models-at-scale/index.md b/content/github-models/github-models-at-scale/index.md
deleted file mode 100644
index 17066195cd96..000000000000
--- a/content/github-models/github-models-at-scale/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: GitHub Models at scale
-intro: 'Manage {% data variables.product.prodname_github_models %} in your enterprise and organizations.'
-versions:
- feature: github-models
-children:
- - /use-models-at-scale
- - /manage-models-at-scale
- - /using-your-own-api-keys-in-github-models
----
-
diff --git a/content/github-models/github-models-at-scale/manage-models-at-scale.md b/content/github-models/github-models-at-scale/manage-models-at-scale.md
deleted file mode 100644
index b7842297405b..000000000000
--- a/content/github-models/github-models-at-scale/manage-models-at-scale.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-title: Managing your team's model usage
-shortTitle: Manage Models at scale
-intro: Control and secure AI models in your organization with {% data variables.product.prodname_github_models %}.
-versions:
- feature: github-models
-permissions: Organization owners can manage the models used in an organization
-allowTitleToDifferFromFilename: true
-category:
- - Manage GitHub Models for your organization
----
-
-{% data reusables.models.models-preview-note %}
-
-## Why restrict model usage in your organization?
-
-Limiting the models available to your developers can help **control spend on models and meet your governance, data security, and compliance requirements**.
-
-If you don't manage access, your teams may inadvertently use models that do not meet your organization’s standards, leading to potential risks such as:
-
-* Unexpected costs from high-priced models
-* Security or compliance issues caused by unauthorized AI services
-* Time wasted integrating unapproved or suboptimal models
-
-For more information about using models at scale, see [AUTOTITLE](/github-models/github-models-at-scale/use-models-at-scale).
-
-## Exceptions to your organization's model settings
-
-While {% data variables.product.prodname_github_models %} for organizations and repositories is in public preview, some of your organization's model settings are not applied in certain circumstances. Your teams will be able to use AI models without limitation in the following places:
-
-* {% data variables.product.prodname_emus %} organizations
-* {% data variables.product.prodname_github_models %} extension for {% data variables.product.prodname_cli %}
-* {% data variables.product.prodname_github_models %} extension for {% data variables.copilot.copilot_chat %}
-* {% data variables.product.prodname_github_models %} VS Code extension
-* Playground for {% data variables.product.prodname_github_models %} in the {% data variables.product.prodname_marketplace %} at https://github.com/marketplace/models.
-
-## Enabling {% data variables.product.prodname_github_models %} for an enterprise
-
-{% data reusables.models.prereq-enable-models-in-enterprise %}
-
-{% data reusables.enterprise-accounts.access-enterprise %}
-{% data reusables.enterprise-accounts.policies-tab %}
-{% data reusables.enterprise-accounts.models-policies %}
-1. Under "Models", in the "Models in your enterprise" section, click {% octicon "chevron-down" aria-label="the down arrow" %} beside **Disabled** and select one of the following options:
- * **Enabled**: Enable {% data variables.product.prodname_github_models %} for all organizations in your enterprise.
- * **No policy**: Allow each organization in your enterprise to manage the enablement of {% data variables.product.prodname_github_models %} independently.
-
-## Controlling model usage in your organization
-
-{% data reusables.models.enterprise-change-models-settings %}
-
-{% data reusables.models.enable-select-models-intro %}
-
-{% data reusables.models.enable-select-models-in-org %}
diff --git a/content/github-models/github-models-at-scale/use-models-at-scale.md b/content/github-models/github-models-at-scale/use-models-at-scale.md
deleted file mode 100644
index ffb2b41c0766..000000000000
--- a/content/github-models/github-models-at-scale/use-models-at-scale.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-title: Using {% data variables.product.prodname_github_models %} to develop AI-powered applications in your enterprise
-shortTitle: Use Models at scale
-intro: Streamline AI development in your enterprise.
-versions:
- feature: github-models
-permissions: 'Organization owners and enterprise owners'
-allowTitleToDifferFromFilename: true
-category:
- - Manage GitHub Models for your organization
----
-
-{% data reusables.models.models-preview-note %}
-
-{% data variables.product.prodname_github_models %} allows your developers to build AI-powered applications at scale while your enterprise maintains control, compliance, and cost efficiency.
-
-## Why {% data variables.product.prodname_github_models %}?
-
-* **Centralized model management:** Control which AI models and providers are available to developers across your organization.
-* **AI development at speed:** Quickly prototype, evaluate, and optimize prompts and models.
-* **API access:** Use the {% data variables.product.prodname_github_models %} REST API to automate and integrate with enterprise workflows.
-* **Custom model integration:** Bring your own LLM API keys to connect external or custom models, giving your organization greater flexibility and control over which models are available in {% data variables.product.prodname_github_models %}, whilst keeping aligned with your existing payment methods, credits, and providers.
-* **Governance and compliance controls:** Enforce your organization's standards and monitor model usage.
-* **Cost optimization:** Avoid unexpected costs from high-priced models.
-* **Collaboration:** Share prompts and results using standard {% data variables.product.github %} development practices.
-* **Security-focused architecture:** Rest assured that your data remains within {% data variables.product.github %} and Azure and is not shared with model providers.
-* **Visual interface:** Allow non-technical team members to contribute alongside developers.
-* **Version control:** All prompt and model changes go through a standard {% data variables.product.github %} commit and pull request flow so you know when and why a prompt changed.
-
-See [AUTOTITLE](/github-models/about-github-models).
-
-## Best practices for using {% data variables.product.prodname_github_models %} at scale
-
-The following best practices can help you effectively use {% data variables.product.prodname_github_models %} across your organization.
-
-### Compare and evaluate AI models for governance and compliance
-
-Review and compare available AI models against your company’s governance, data security, and compliance requirements. You can do this in any Models-enabled {% data variables.product.github %} repository or in the {% data variables.product.prodname_github_models %} catalog from the {% data variables.product.prodname_marketplace %} at https://github.com/marketplace?type=models. Your considerations may include:
-
-* **Governance and security:** Examine each model's compliance with standards and regulations such as GDPR, SOC 2, and ISO 27001, and ensure data is not persisted outside of your organization unless explicitly logged with consent.
-* **Model performance:** Run benchmark evaluations on your internal datasets to assess reasoning, context retention, and hallucination rates.
-* **API control and visibility:** Require fine-grained controls over usage quotas, prompt inspection, and rate limits at a team or organization level.
-* **Cost optimization:** Include token pricing, inference speed, and the availability of model variants for tiered use. For example, you can use cheaper models for test case generation compared to advanced models for architecture discussions.
-
-Once you have decided which models you want to use, you can limit access in your organization to only those models, see [AUTOTITLE](/github-models/github-models-at-scale/manage-models-at-scale).
-
-### Optimize and share prompts across teams
-
-Your developers can use the prompt editor in {% data variables.product.prodname_github_models %} to create and refine prompts. Teams can experiment with different prompt variations and models in a stable, non-production environment that integrates with {% data variables.product.github %} development workflows. The visual interface allows non-technical stakeholders to contribute alongside developers. See [Using the prompt editor](/github-models/use-github-models/prototyping-with-ai-models#using-the-prompt-editor).
-
-The lightweight evaluation tooling allows your team to compare results across common metrics like latency, relevance, and groundedness, or you can create custom evaluators. Compare prompt and model performance for your specific generative AI use cases, such as creating code, tests, documentation, or code review suggestions.
-
-As your team creates effective prompts, they can save them as YAML files and share them for review using {% data variables.product.github %} pull requests. Committed prompts are accessible to other teams and workflows and can be kept consistent with your company's standards. This centralized and collaborative approach to prompt management accelerates development and can help you enforce best practices across your organization.
-
-### Evaluate and optimize model usage costs
-
-As adoption of your AI-powered application grows and AI models improve, use {% data variables.product.prodname_github_models %} to evaluate the cost and performance of different models and model updates. Select the most cost-effective options for your organization's needs and manage expenses as usage scales across multiple teams.
-
-### Use the {% data variables.product.prodname_github_models %} REST API or extensions for programmatic management
-
-To more efficiently manage resources across all teams, you can leverage the {% data variables.product.prodname_github_models %} REST API to:
-
-* **Manage and update organization settings:** Programmatically update model access permissions and governance settings across multiple teams at once, to ensure consistency and compliance.
-* **List and retrieve prompts:** List, retrieve, and audit prompts used by different teams, to monitor usage, share successful prompts, and maintain a central repository of best practices.
-* **Run model inference requests:** Run inference requests for specific models and parameters such as frequency penalty, maximum tokens, response format, and presence penalty.
-
-You can also use these extensions to run inference requests and manage prompts:
-* {% data variables.product.prodname_github_models %} extension for {% data variables.product.prodname_cli %}
-* {% data variables.product.prodname_github_models %} extension for {% data variables.copilot.copilot_chat %}
-* {% data variables.product.prodname_github_models %} VS Code extension
-
-### Monitor, iterate, and integrate
-
-With built-in governance features, you can monitor model usage and ensure ongoing compliance with company policies. Audit logs provide visibility into who accessed or modified models and prompts. The {% data variables.product.prodname_github_models %} repository integration allows all stakeholders to collaborate and continuously iterate on AI-powered applications.
-
-## Example: Use {% data variables.product.prodname_github_models %} with {% data variables.product.prodname_actions %} to summarize issues
-
-Large software development projects often contain issues full of technical details. You can roll out AI-powered issue summaries using {% data variables.product.prodname_github_models %} and {% data variables.product.prodname_actions %}.
-
-**Prerequisite:** Enable {% data variables.product.prodname_github_models %} in your organization, and set the models and publishers you want to make available to individual repositories.
-
-1. **Create a prompt in a repository**
-
- In the "Models" tab of a repository, create a prompt using the prompt editor.
-
- Example system prompt:
-
- > You are a summarizer of GitHub issues. Emphasize key technical points or important questions.
-
- Example user prompt:
-
- > Summarize this issue - {% raw %}{{input}}{% endraw %}
-
-1. **Run and iterate on your prompt**
-
- Run your prompt. Provide some sample issue content in the "Variables" pane as the value of `{% raw %}{{input}}{% endraw %}`.
-
- Try different models (for example, OpenAI GPT-4o) and compare results. Adjust parameters such as max tokens and temperature. Iterate until you are satisfied with the results.
-
-1. **Optionally, run more extensive tests**
-
- The "Compare" view allows you to run multiple of your prompt against different models simultaneously and see how the results compare in a grid view. You can also define and use evaluators to ensure that the results contain certain keywords or meet other standards.
-
-1. **Commit your prompt**
-
- Name your prompt and commit changes to go through the pull request flow. For example, if you name your prompt `summarize`, you'll get a `summarize.prompt.yaml` file at the root level of your repository that looks something like this:
-
- ```yaml
- messages:
- - role: system
- content: >-
- You are a summarizer of GitHub issues. Emphasize key technical points or
- important questions.
- - role: user
- content: 'Summarize this issue, please - {% raw %}{{input}}{% endraw %}'
- model: openai/gpt-4o
- modelParameters:
- max_tokens: 4096
- ```
-
- Once your pull request is reviewed and merged, your prompt will be available for anyone to use in the repository.
-
-1. **Call your prompt in a workflow**
-
- For information on creating workflows, see [AUTOTITLE](/actions/how-tos/write-workflows).
-
- You need to set `models: read` permission to allow a prompt to be called in a workflow.
-
- Here's an example workflow that adds an AI-generated summary as a comment on any newly created issue:
-
- ```yaml copy
- name: Summarize New Issue
-
- on:
- issues:
- types: [opened]
-
- permissions:
- issues: write
- contents: read
- models: read
-
- jobs:
- summarize_issue:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: {% data reusables.actions.action-checkout %}
-
- - name: Install gh-models extension
- run: gh extension install https://github.com/github/gh-models
- env:
- GH_TOKEN: ${% raw %}{{ github.token }}{% endraw %}
-
- - name: Create issue body file
- run: |
- cat > issue_body.txt << 'EOT'
- ${% raw %}{{ github.event.issue.body }}{% endraw %}
- EOT
-
- - name: Summarize new issue
- run: |
- cat issue_body.txt | gh models run --file summarize.prompt.yml > summary.txt
- env:
- GH_TOKEN: ${% raw %}{{ github.token }}{% endraw %}
-
- - name: Update issue with summary
- run: |
- SUMMARY=$(cat summary.txt)
- gh issue comment ${% raw %}{{ github.event.issue.number }}{% endraw %} --body "### Issue Summary
- ${SUMMARY}"
- env:
- GH_TOKEN: ${% raw %}{{ github.token }}{% endraw %}
- ```
-
-1. **Monitor and iterate**
-
- You can monitor the performance of the action and iterate on the prompt and model selection using the {% data variables.product.prodname_github_models %} prompt editor. You can also use the [CLI extension](https://github.com/github/gh-models) to test locally, or use the {% ifversion fpt %} [{% data variables.product.prodname_github_models %} REST API](/rest/models?apiVersion=2022-11-28) {% else %} API {% endif %}to programmatically update the prompt and model settings.
-
- You may also want to consider saving the model response as a file in your repository, so that you can review and iterate on the model's performance over time. This allows you to continuously improve the quality of the summaries and ensure they meet your team's needs.
diff --git a/content/github-models/github-models-at-scale/using-your-own-api-keys-in-github-models.md b/content/github-models/github-models-at-scale/using-your-own-api-keys-in-github-models.md
deleted file mode 100644
index feea04b32bea..000000000000
--- a/content/github-models/github-models-at-scale/using-your-own-api-keys-in-github-models.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: Using your own API keys in GitHub Models
-shortTitle: Use custom models
-intro: 'Learn how to integrate your preferred custom models with {% data variables.product.prodname_github_models %} by using your own LLM API keys.'
-versions:
- feature: github-models
-permissions: 'Organization owners can add custom models to {% data variables.product.prodname_github_models %} for their organization'
-allowTitleToDifferFromFilename: true
-redirect_from:
- - /github-models/github-models-at-scale/set-up-custom-model-integration-models-byok
-category:
- - Manage GitHub Models for your organization
----
-
-{% data reusables.models.byok-preview-note %}
->
-> Model support is currently limited to OpenAI and AzureAI.
-
-You can bring your own API keys (BYOK) to {% data variables.product.prodname_github_models %}, and enable teams to use your preferred large language model (LLM) providers across tools like Prompts, Playground, and Models in Actions. For more information about {% data variables.product.prodname_github_models %}, see [AUTOTITLE](/github-models/about-github-models).
-
-To learn about billing and pricing, see [AUTOTITLE](/billing/concepts/product-billing/github-models).
-
-## Why bring your own API keys?
-
-As an organization owner, you may have specific requirements for governance, data security, and compliance. By setting up your own API keys, you can:
-
-* **Governance and compliance:** Choose LLM providers that comply with your organization's policies and regulatory requirements.
-* **Cost management:** Align with your existing payment methods, contracts, credits, or negotiated rates, and avoid usage overages.
-* **Visibility and control:** Manage which models your team can access, and monitor usage through your provider's existing dashboards and billing.
-* **Flexibility:** Support custom or specialized models that your organization already uses.
-
-## Setting up your API keys to add custom models
-
-> [!IMPORTANT] We highly recommend adhering to the principle of least privilege by assigning only the minimum necessary scopes to your API keys.
-
-You must first add the relevant API keys for the organization. After that, your can specify or enable the custom models you wish to make available to users.
-
-### Adding API keys
-
-{% data reusables.profile.access_org %}
-{% data reusables.profile.org_settings %}
-{% data reusables.organizations.custom-models %}
-1. Click **Add API key**.
-1. In the "Add the API key" dialog, provide details about your key. **Name** and **API key** are compulsory fields.
-1. Click **Save**.
-
-## Enabling custom models
-
-{% data reusables.profile.access_org %}
-{% data reusables.profile.org_settings %}
-{% data reusables.organizations.models-development %}
-1. Under "Models permissions," select **All publishers** to enable models added by API keys.
- * If this option isn't available, you need to allow the use of the model in the organization. See [AUTOTITLE](/github-models/github-models-at-scale/manage-models-at-scale#controlling-model-usage-in-your-organization).
-1. Optionally, select **Only select models** to create a custom list of enabled or disabled models. This allows you to control which models are available to your organization.
-
-## Creating an enabled or disabled models list
-
-To control which models are available to your organization, create an enabled or disabled models list as follows:
-
-{% data reusables.profile.access_org %}
-{% data reusables.profile.org_settings %}
-{% data reusables.organizations.models-development %}
-1. Under "Models permissions," select **Only select models**, then select **Enabled list** from the dropdown to create a list of allowed models.
-1. Optionally, select **Disabled list** from the dropdown if you want to create a list of blocked models.
-1. Above the table of models, click **Add models or publishers**.
-1. In the "Select models and publishers to allow" dialog, select the models and publishers you want to include in your list.
-1. Click **Update enabled list** to save your changes.
-
-## Next steps
-
-Now that you've enabled your custom models in {% data variables.product.prodname_github_models %}, learn how to:
-
-* Experiment with your custom model in the playground. See [Experimenting with AI models in the playground](/github-models/use-github-models/prototyping-with-ai-models#experimenting-with-ai-models-in-the-playground).
-
-* Store prompts on {% data variables.product.github %} so that you can iterate to fine-tune your prompts, and share them with stakeholders. See [AUTOTITLE](/github-models/use-github-models/storing-prompts-in-github-repositories).
-
-* Launch your AI application. See [Going to production](/github-models/use-github-models/prototyping-with-ai-models#going-to-production).
diff --git a/content/github-models/index.md b/content/github-models/index.md
index b8f5a3f6c85a..0418441daef1 100644
--- a/content/github-models/index.md
+++ b/content/github-models/index.md
@@ -1,29 +1,45 @@
---
title: GitHub Models
-intro: 'Find and experiment with AI models for free.'
+shortTitle: GitHub Models
+intro: '{% data variables.product.prodname_github_models %} has been {% data variables.release-phases.retired %}.'
versions:
fpt: '*'
- ghes: '*'
ghec: '*'
-layout: discovery-landing
-introLinks:
- overview: /github-models/about-github-models
- quickstart: /github-models/quickstart
-includedCategories:
- - 'Build with AI models'
- - 'Manage GitHub Models for your organization'
-carousels:
- recommended:
- - /github-models/quickstart
- - /github-models/about-github-models
- - /github-models/use-github-models/prototyping-with-ai-models
- - /github-models/use-github-models/evaluating-ai-models
- - /github-models/use-github-models/optimizing-your-ai-powered-app-with-github-models
- - /github-models/github-models-at-scale/use-models-at-scale
-children:
- - /about-github-models
- - /quickstart
- - /use-github-models
- - /github-models-at-scale
- - /responsible-use-of-github-models
+redirect_from:
+ - /github-models/about-github-models
+ - /github-models/quickstart
+ - /models/quickstart
+ - /github-models/responsible-use-of-github-models
+ - /github-models/use-github-models
+ - /github-models/use-github-models/prototyping-with-ai-models
+ - /github-models/prototyping-with-ai-models
+ - /github-models/use-github-models/evaluating-ai-models
+ - /github-models/use-github-models/optimizing-your-ai-powered-app-with-github-models
+ - /github-models/use-github-models/storing-prompts-in-github-repositories
+ - /github-models/github-models-at-scale
+ - /github-models/github-models-at-scale/use-models-at-scale
+ - /github-models/github-models-at-scale/manage-models-at-scale
+ - /github-models/github-models-at-scale/using-your-own-api-keys-in-github-models
+ - /github-models/github-models-at-scale/set-up-custom-model-integration-models-byok
+ - /organizations/managing-organization-settings/managing-or-restricting-github-models-for-your-organization
+ - /repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-github-models-in-your-repository
+ - /billing/concepts/product-billing/github-models
+ - /billing/managing-billing-for-your-products/about-billing-for-github-models
+ - /billing/reference/costs-for-github-models
+ - /billing/reference/models-multipliers-and-costs
+ - /search-github/searching-on-github/searching-github-models
+ - /rest/models
+ - /rest/models/catalog
+ - /rest/models/inference
+ - /rest/models/embeddings
+children: []
---
+
+As of July 30, 2026, {% data variables.product.prodname_github_models %} has been fully {% data variables.release-phases.retired %}. The playground, model catalog, inference API, and bring your own key (BYOK) are no longer available to any customer.
+
+{% data variables.product.prodname_github_models %} was a separate service from {% data variables.product.prodname_copilot %} and is unrelated to {% data variables.product.prodname_copilot %} services.
+
+## Where to go next
+
+* For new and existing projects that need AI model access, [Azure AI Foundry](https://ai.azure.com/) offers a broad model catalog.
+* To build AI-powered workflows directly on {% data variables.product.github %}, you can use {% data variables.product.prodname_copilot %}, which gives you access to a range of models. For more information, see [AUTOTITLE](/copilot).
diff --git a/content/github-models/quickstart.md b/content/github-models/quickstart.md
deleted file mode 100644
index a1c980d88cb8..000000000000
--- a/content/github-models/quickstart.md
+++ /dev/null
@@ -1,199 +0,0 @@
----
-title: Quickstart for GitHub Models
-intro: Run your first model with {% data variables.product.prodname_github_models %} in minutes.
-allowTitleToDifferFromFilename: true
-redirect_from:
- - /models/quickstart
-versions:
- fpt: '*'
- ghec: '*'
-shortTitle: Quickstart
-contentType: get-started
-category:
- - Build with AI models
----
-
-## Introduction
-
-{% data variables.product.prodname_github_models %} is an AI inference API from {% data variables.product.prodname_dotcom %} that lets you run AI models using just your {% data variables.product.prodname_dotcom %} credentials. You can choose from many different models—including from OpenAI, Meta, and DeepSeek—and use them in scripts, apps, or even {% data variables.product.prodname_actions %}, with no separate authentication process.
-
-This guide helps you try out models quickly in the playground, then shows you how to run your first model via API or workflow.
-
-## Step 1: Try models in the playground
-
-1. Go to **[https://github.com/marketplace/models](https://github.com/marketplace/models)**.
-1. In the playground, select at least one model from the dropdown menu.
-1. Test out different prompts using the **Chat** view, and compare responses from different models.
-1. Use the **Parameters** view to customize the parameters for the models you are testing, then see how they impact responses.
-
- > [!NOTE]
- > The playground works out of the box if you're signed in to {% data variables.product.prodname_dotcom %}. It uses your {% data variables.product.prodname_dotcom %} account for access—no setup or API keys required.
-
-## Step 2: Make an API call
-
-For full details on available fields, headers, and request formats, see the [API reference for {% data variables.product.prodname_github_models %}](/free-pro-team@latest/rest/models/inference?apiVersion=2022-11-28).
-
-To call models programmatically, you’ll need:
-
-* A {% data variables.product.prodname_dotcom %} account.
-* A {% data variables.product.pat_generic %} (PAT) with the `models` scope, which you can create [in settings](https://github.com/settings/tokens).
-
-1. Run the following `curl` command, replacing `YOUR_GITHUB_PAT` with your token.
-
- ```bash copy
- curl -L \
- -X POST \
- -H "Accept: application/vnd.github+json" \
- -H "Authorization: Bearer YOUR_GITHUB_PAT" \
- -H "X-GitHub-Api-Version: {{ defaultRestApiVersion }}" \
- -H "Content-Type: application/json" \
- https://models.github.ai/inference/chat/completions \
- -d '{"model":"openai/gpt-4.1","messages":[{"role":"user","content":"What is the capital of France?"}]}'
- ```
-
-1. You’ll receive a response like this:
-
- ```json
- {
- "choices": [
- {
- "message": {
- "role": "assistant",
- "content": "The capital of France is **Paris**."
- }
- }
- ],
- ...other fields omitted
- }
- ```
-
-1. To try other models, change the value of the `model` field in the JSON payload to one from the [marketplace](https://github.com/marketplace/models).
-
-## Step 3: Run models in {% data variables.product.prodname_actions %}
-
-1. In your repository, create a workflow file at `.github/workflows/models-demo.yml`.
-1. Paste the following workflow into the file you just created.
-
- ```yaml copy
- name: Use GitHub Models
-
- on: [push]
-
- permissions:
- models: read
-
- jobs:
- call-model:
- runs-on: ubuntu-latest
- steps:
- - name: Call AI model
- env:
- GITHUB_TOKEN: {% raw %}${{ secrets.GITHUB_TOKEN }}{% endraw %}
- run: |
- curl "https://models.github.ai/inference/chat/completions" \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $GITHUB_TOKEN" \
- -d '{
- "messages": [
- {
- "role": "user",
- "content": "Explain the concept of recursion."
- }
- ],
- "model": "openai/gpt-4o"
- }'
- ```
-
- > [!NOTE]
- > Workflows that call {% data variables.product.prodname_github_models %} must include `models: read` in the permissions block. {% data variables.product.prodname_dotcom %}-hosted runners provide a `GITHUB_TOKEN` automatically.
-
-1. Commit and push to trigger the workflow.
-
-This example shows how to send a prompt to a model and use the response in your continuous integration (CI) workflows. For more advanced use cases, such as summarizing issues, detecting missing reproduction steps for bug reports, or responding to pull requests, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models).
-
-## Step 4: Save your first prompt file
-
-{% data variables.product.prodname_github_models %} supports reusable prompts defined in `.prompt.yml` files. Once you add this file to your repository, it will appear in the Models page of your repository and can be run directly in the Prompt Editor and evaluation tooling. Learn more about [AUTOTITLE](/github-models/use-github-models/storing-prompts-in-github-repositories).
-
-1. In your repository, create a file named `summarize.prompt.yml`. You can save it in any directory.
-1. Paste the following example prompt into the file you just created.
-
- ```yaml copy
- name: Text Summarizer
- description: Summarizes input text concisely
- model: openai/gpt-4o-mini
- modelParameters:
- temperature: 0.5
- messages:
- - role: system
- content: You are a text summarizer. Your only job is to summarize text given to you.
- - role: user
- content: |
- Summarize the given text, beginning with "Summary -":
-
- {% raw %}{{input}}{% endraw %}
-
- ```
-
-1. Commit and push the file to your repository.
-1. Go to the **Models** tab in your repository.
-1. In the navigation menu, click **{% octicon "note" aria-hidden="true" aria-label="none" %} Prompts**, then click on the prompt file.
-1. The prompt will open in the prompt editor. Click **Run**. A right-hand sidebar will appear asking you to enter input text. Enter any input text, then click **Run** again in the bottom right corner to test it out.
-
- > [!NOTE]
- > The prompt editor doesn’t automatically pass repository content into prompts. You provide the input manually.
-
-## Step 5: Set up your first evaluation
-
-Evaluations help you measure how different models respond to the same inputs so you can choose the best one for your use case.
-
-1. Go back to the `summarize.prompt.yml` file you created in the previous step.
-1. Update the file to match the following example.
-
- ```yaml copy
- name: Text Summarizer
- description: Summarizes input text concisely
- model: openai/gpt-4o-mini
- modelParameters:
- temperature: 0.5
- messages:
- - role: system
- content: You are a text summarizer. Your only job is to summarize text given to you.
- - role: user
- content: |
- Summarize the given text, beginning with "Summary -":
-
- {% raw %}{{input}}{% endraw %}
-
- testData:
- - input: |
- The quick brown fox jumped over the lazy dog.
- The dog was too tired to react.
- expected: Summary - A fox jumped over a lazy, unresponsive dog.
- - input: |
- The museum opened a new dinosaur exhibit this weekend. Families from all
- over the city came to see the life-sized fossils and interactive displays.
- expected: Summary - The museum's new dinosaur exhibit attracted many families with its fossils and interactive displays.
- evaluators:
- - name: Output should start with 'Summary -'
- string:
- startsWith: 'Summary -'
- - name: Similarity
- uses: github/similarity
- ```
-
-1. Commit and push the file to your repository.
-1. In your repository, click the **Models** tab. Then click **{% octicon "note" aria-hidden="true" aria-label="none" %} Prompts** and reopen the same prompt in the prompt editor.
-1. In the top left-hand corner, you can toggle the view from **Edit** to **Compare**. Click **Compare**.
-1. Your evaluation will be set up automatically. Click **Run** to see results.
-
- > [!TIP]
- > By clicking **Add prompt**, you can run the same prompt with different models or change the prompt wording to get inference responses with multiple variations at once, see evaluations, and view them side by side to make data-driven model decisions.
-
-## Next steps
-
-* [AUTOTITLE](/github-models/about-github-models).
-* [Browse the model catalog](https://github.com/marketplace?type=models)
-* [AUTOTITLE](/github-models/use-github-models/storing-prompts-in-github-repositories)
-* [AUTOTITLE](/github-models/use-github-models/evaluating-ai-models)
-* [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models)
diff --git a/content/github-models/responsible-use-of-github-models.md b/content/github-models/responsible-use-of-github-models.md
deleted file mode 100644
index 9e55c8fecc0c..000000000000
--- a/content/github-models/responsible-use-of-github-models.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Responsible use of GitHub Models
-shortTitle: Responsible use
-intro: Learn how to use {% data variables.product.prodname_github_models %} responsibly by understanding its purposes, capabilities, and limitations.
-versions:
- feature: github-models
-category:
- - Build with AI models
----
-
-With {% data variables.product.prodname_github_models %}, you build your understanding of AI model capabilities by experimenting with model settings and sending prompts through a chat interface. Additionally, you can directly interact with models through an SDK. Refer to a model's "Getting Started" tab for more information about how to use the SDK. Refer to a model’s "README" tab for more information on the model. Remember when interacting with a model you are experimenting with AI, so content mistakes are possible.
-
-{% data variables.product.prodname_github_models %} is designed to allow for learning, experimentation and proof-of-concept activities. The feature is subject to various limits (including requests per minute, requests per day, tokens per request, and concurrent requests) and is not designed for production use cases. {% data variables.product.prodname_github_models %} employs a number of [content filters](https://azure.microsoft.com/en-us/products/ai-services/ai-content-safety). These filters cannot be turned off as part of the {% data variables.product.prodname_github_models %} experience. If you decide to employ models through [Azure AI](https://aka.ms/azureai/github-models) or a paid service, please configure your content filters to meet your requirements.
diff --git a/content/github-models/use-github-models/evaluating-ai-models.md b/content/github-models/use-github-models/evaluating-ai-models.md
deleted file mode 100644
index 50ec6fe78163..000000000000
--- a/content/github-models/use-github-models/evaluating-ai-models.md
+++ /dev/null
@@ -1,274 +0,0 @@
----
-title: Evaluating AI models
-intro: 'Test and compare AI model outputs using evaluators and scoring metrics in {% data variables.product.prodname_github_models %}.'
-versions:
- feature: github-models
-shortTitle: Evaluate AI models
-category:
- - Build with AI models
----
-
-## Overview
-
-{% data variables.product.prodname_github_models %} provides a simple evaluation workflow that helps developers compare large language models (LLMs), refine prompts, and make data-driven decisions within the {% data variables.product.github %} platform. You can use {% data variables.product.prodname_github_models %} to experiment with new features or validate model changes by analyzing performance, accuracy, and cost through structured evaluation tools.
-
->[!TIP]
-> You can run evaluations directly from the command line using the `gh models eval` command. It uses the same evaluators as the UI: string match, similarity, custom LLM-as-a-judge evaluators, and more, so you can test your `.prompt.yml` file locally or in CI.
-
-## Use cases for {% data variables.product.prodname_github_models %}
-
-Model behavior can vary widely based on the prompt, input, or configuration. {% data variables.product.prodname_github_models %} helps you:
-
-* Test and compare multiple LLMs across realistic use cases.
-* Optimize prompt phrasing, temperature, and other parameters.
-* Evaluate model outputs using structured, repeatable metrics.
-* Make AI development integrated into your development workflow.
-
-## Example scenario
-
-Consider a scenario where you're building a feature to summarize customer feedback submitted through support tickets. These summaries will be used to generate internal reports and tickets, so the output needs to be clear, relevant, and concise.
-
-You want to:
-
-* Experiment with different models and prompt configurations.
-* Evaluate the best-performing configuration based on quality, consistency, and efficiency.
-* Save the configuration to your repository for reuse and collaboration.
-
-## Prompt testing in the Playground
-
-To familiarize yourself with how to create and manage prompts in {% data variables.product.prodname_github_models %}, see [Testing a prompt in the Playground](/github-models/use-github-models/optimizing-your-ai-powered-app-with-github-models).
-
-The Playground lets you compare models side by side, adjust their parameters, and test prompt variations.
-
-In this step, you'll configure a model to generate summaries for customer support feedback. You'll define a system prompt, test it with a sample input, and refine it to ensure the output is concise and relevant.
-
-### Defining the system prompt
-
-Define the model's behavior for your current goal. In this case, the goal is to summarize customer feedback. Under **Parameters**, enter the following System prompt:
-
- You are a helpful assistant that summarizes support ticket responses into concise summaries.
-
-Leave the remaining settings set to their defaults.
-
-
-
-### Writing a user prompt
-
-Now that the model is set up, enter the following customer feedback into the **Prompt** dialog:
-
- The app crashes every time I try to upload a PDF from my phone. It works on desktop but not on mobile.
-
-The model may generate a response like the following:
-
- The user experiences consistent app crashes when attempting to upload a PDF from their phone. Uploading PDFs works normally on desktop. They request an investigation into the issue.
-
-### Using variables in prompts
-
-> [!NOTE]
-> This feature is currently in {% data variables.release-phases.public_preview %} and subject to change.
-
-At this point, the configuration generates a clear and concise summary. At the bottom of the **Parameters** settings, click **Create prompt.yml file** to open the Prompt view. Your system prompt will be prefilled automatically.
-
-In the **User prompt** field, enter a prompt that includes one or more variable placeholders inside double curly braces. For example:
-
-```text
-Travel or shopping assistants using {% raw %}{{city}}{% endraw %}, {% raw %}{{intent}}{% endraw %}, and {% raw %}{{budget}}{% endraw %} to tailor recommendations.
-```
-
-Each variable listed in the prompt will appear as a parameter in compare mode. When running an evaluation, you'll be prompted to provide values for each variable. This allows prompts to be reused with different inputs without modifying the prompt content.
-
-Alternatively, you can add variables in your `.prompt.yml` file system or user prompt to automate the process of evaluating with multiple variables in the future. See [AUTOTITLE](/github-models/use-github-models/storing-prompts-in-github-repositories).
-
-## Adding test inputs
-
-At the top of the Prompts view, select **Compare** to toggle the Comparisons view. This view allows you to run structured comparisons across multiple prompts or models and apply evaluators to measure performance.
-
-
-
-In the Comparisons view, each row in the table represents a single test case, with a specific input and an expected output. Each column presents a different prompt configuration to compare how various models or prompt styles perform using evaluators.
-
-Click **Add rows** to enter your test data. The input simulates a real support message, and the expected output represents the ideal summary the model should return. The table below provides sample test inputs and their corresponding expected outputs for evaluation.
-
-| Row | **Input** | **Expected output** |
-|-----|--------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
-| 1 | The app crashes every time I try to upload a PDF from my phone. It works on desktop but not on mobile. | User reports that the mobile app crashes every time they try to upload a PDF, while the desktop version works without issues. |
-| 2 | I contacted support two days ago and haven't heard back. I need help recovering my account ASAP. | User is awaiting support response and urgently needs account recovery assistance. |
-| 3 | Please add dark mode. It's very hard to use at night. My eyes hurt after prolonged use. | User requests dark mode due to eye strain during nighttime use. |
-
-### Adjusting model parameters
-
-To the right of the table, click {% octicon "plus" aria-label="Add prompt configuration" %} to add a new prompt configuration.
-
-Within the new prompt configuration, you can update the model and fine-tune its behavior using the available parameters settings. These settings control how the model generates text, including its length, randomness, and repetition.
-
-### Configuring the model
-
-From the Model dropdown, choose PHI-4 to create a distinct configuration for comparison.
-
-You can adjust the following parameters to influence the model’s output:
-
-* **Max Tokens**: Sets the maximum number of tokens the model can return. Higher values allow longer outputs.
-* **Temperature**: Controls randomness in the response. Lower values (0.2–0.4) produce more focused, deterministic outputs. Higher values (0.8–1.0) introduce more variation and creativity.
-* **Top P**: Controls output diversity by selecting from a pool of the most probable next words. Lower values reduce variability, similar to lowering temperature.
-* **Presence Penalty**: Discourages the model from introducing new topics. Higher values apply a stronger penalty. A value of 0 is typically suitable for summarization.
-* **Frequency Penalty**: Reduces the likelihood of repeating words. Higher values apply a stronger penalty. A value between 0 and 0.5 helps keep summaries clear and free of redundancy.
-* **Stop**: Specifies one or more strings that, when generated, will cut off the model's response. Use this to prevent overly long outputs or enforce formatting rules.
-
-The table below provides a parameter configuration for generating concise summaries during model comparison.
-
-| Parameter | Value | Reason |
-|-------------------|------------|-------------------------------------------------------------|
-| Max Tokens | 128 | Keeps responses short and on-topic |
-| Temperature | 0.3 | Ensures deterministic, focused outputs |
-| Top P | 1.0 | Allows full vocabulary but keeps selection guided |
-| Presence Penalty | 0 | No penalty—summaries don’t need topic variation |
-| Frequency Penalty | 0.3 | Reduces repeated phrasing in compact summaries |
-| Stop | (optional) | Use if you want to end output after a keyword or symbol |
-
-After applying the parameters, you can add additional columns to compare more models or prompt configurations side by side.
-
-## Evaluating outputs
-
-Once the prompt is configured, run a structured evaluation to compare model outputs using real data and repeatable metrics.
-
-Model evaluation helps you understand how different models and prompt configurations perform across real inputs. In the Prompt view, you can apply evaluators to multiple models side by side and review metrics such as similarity, fluency, coherence, relevance, and groundedness.
-
-The following evaluators are available:
-
-* **Similarity**: Measures how closely a model's output matches an expected or reference answer. This is useful when you want to confirm that the model returns consistent and accurate responses aligned with a known result. The score ranges from 0 to 1, with higher values indicating greater similarity.
-* **Fluency**: Evaluates the linguistic quality of a response, including grammar, coherence, and readability. This results in linguistically correct responses.
-* **Coherence**: Assesses the ability of the LLM to generate text that reads naturally, flows smoothly, and resembles human-like language in its responses. Use it when assessing the readability and user-friendliness of a model’s generated responses in real-world applications.
-* **Relevance**: Refers to how effectively a response addresses a question. It assesses the accuracy, completeness, and direct relevance of the response based solely on the given information. The score ranges from 0 to 1, with higher values indicating stronger alignment with the input's intent.
-* **Groundedness**: Measures how well an answer is anchored in the provided context, evaluating its relevance, accuracy, and completeness based exclusively on that context. It assesses the extent to which the answer fully addresses the question without introducing unrelated or incorrect information. The score ranges from 0 to 1, with higher values indicating higher accuracy.
-* **Custom prompt**: Lets you define your own evaluation criteria for one LLM to assess the output of another. This allows you to score model outputs based on your own guidelines. You can choose between pass/fail or scored evaluations, making it ideal for scenarios where standard metrics do not capture testing expectations.
-
-When you’re ready to evaluate, click **Run** to generate and compare the outputs across all prompt configurations. After the run completes, {% data variables.product.prodname_github_models %} displays the output from each prompt configuration, along with evaluator scores.
-
-
-
-## Test case: PDF upload crash
-
-**Input**: `The app crashes every time I try to upload a PDF from my phone. It works on desktop but not on mobile.`
-
-The following tables display each model's output and its evaluator scores:
-
-| Model | Output |
-|-------|--------------------------------------------------------------------------------------------------------------------------------------------|
-| {% data variables.copilot.copilot_gpt_41 %} | User reports that the app crashes when uploading a PDF from mobile, though uploading works on desktop. |
-| DeepSeek-R1 | Okay, the user is having trouble with the app crashing when they try to upload a PDF from their phone. It works on the desktop but not mobile. Let me break this down. First, the main issue is the app crashing specifically during PDF uploads on mobile. The fact that it works on desktop suggests it's a mobile-specific problem. Possible causes could be related to the mobile app version, the phone's OS, file size limits on mobile, or compatibility issues with certain PDF formats on mobile devices. I need to make sure the summary mentions the crash during PDF uploads on mobile, note that desktop works, and |
-| Phi-4 | The app crashes when attempting to upload a PDF from the mobile device, though it functions correctly on the desktop version. |
-
-| Model | Similarity | Relevance | Groundedness | Input tokens | Output tokens | Latency |
-|---------------|------------|-----------|--------------|--------------|---------------|---------|
-| {% data variables.copilot.copilot_gpt_41 %} | 100% | 50% | 100% | 61 | 20 | 918ms |
-| DeepSeek-R1 | 50% | 50% | 75% | 52 | 128 | 2285ms |
-| Phi-4 | 75% | 100% | 100% | 61 | 66 | 1117ms |
-
-Use the evaluator scores to assess and compare responses beyond surface-level phrasing.
-
-### Similarity
-
-Evaluate how closely each model’s output aligns with the expected summary. The table below shows the relevance scores for each model.
-
-| Model | Similarity score |
-|---------------|------------------|
-| {% data variables.copilot.copilot_gpt_41 %} | 100% |
-| DeepSeek-R1 | 50% |
-| Phi-4 | 75% |
-
-While all models included the key content from the input, DeepSeek-R1’s similarity score is significantly lower due to its verbose internal commentary, which deviate from the expected concise summary format. In contrast, {% data variables.copilot.copilot_gpt_41 %}’s response matches the phrasing and structure of the reference output.
-
-### Relevance
-
-Evaluate how well each model captures the core intent of the input. The table below shows the relevance scores for each model.
-
-| Model | Relevance score |
-|---------------|-----------------|
-| {% data variables.copilot.copilot_gpt_41 %} | 50% |
-| DeepSeek-R1 | 50% |
-| Phi-4 | 100% |
-
-All three models recognized the key issue of the app crashing during PDF uploads on mobile. Phi-4 earned a higher relevance score for reflecting the user's perspective more completely. DeepSeek-R1 lost points for introducing speculative technical causes not mentioned in the original input.
-
-### Groundedness
-
-Evaluate whether each model’s output stays true to the input without introducing unsupported information.
-The table below shows the relevance scores for each model.
-
-| Model | Groundedness score |
-|---------------|--------------------|
-| {% data variables.copilot.copilot_gpt_41 %} | 100% |
-| DeepSeek-R1 | 75% |
-| Phi-4 | 100% |
-
-Even though DeepSeek-R1 adds internal commentary, it does not introduce hallucinated facts. Its final summary sentence correctly reflects the original input.
-
-## Test case: Dark mode request
-
-**Input**: `Please add dark mode. It's very hard to use at night. My eyes hurt after prolonged use.`
-
-The following tables display each model's output and its evaluator scores:
-
-| Model | Output |
-|-------|---------------------------------------------------------------------------------------------------------------------------------------------|
-| {% data variables.copilot.copilot_gpt_41 %} | User requests the addition of a dark mode feature due to discomfort and eye strain when using the app at night. |
-| DeepSeek-R1 | Okay, the user wants dark mode added because it's hard to use at night and their eyes hurt. I need to make a concise summary. Let me start with the main request: adding dark mode. Then mention the reason: eye strain from prolonged use at night. Keep it to one sentence. Maybe structure it as "Request to implement dark mode to reduce eye strain during nighttime use." That covers the key points without extra details. Check if that's under the character limit. Yep, looks good. Summary: Request to implement dark mode to reduce eye strain caused by prolonged nighttime use. |
-| Phi-4 | The customer is requesting the addition of a dark mode feature to reduce eye strain when using the product at night. |
-
-| Model | Similarity | Relevance | Groundedness | Input Tokens | Output Tokens | Latency |
-|---------------|------------|-----------|--------------|---------------|----------------|---------|
-| {% data variables.copilot.copilot_gpt_41 %} | 100% | 75% | 100% | 57 | 18 | 1286ms |
-| DeepSeek-R1 | 50% | 0% | 25% | 49 | 128 | 1946ms |
-| Phi-4 | 100% | 75% | 100% | 58 | 20 | 899ms |
-
-### Similarity
-
-Evaluate how closely each model’s output aligns with the expected summary. The table below shows the relevance scores for each model.
-
-| Model | Similarity score |
-|---------------|------------------|
-| {% data variables.copilot.copilot_gpt_41 %} | 100% |
-| DeepSeek-R1 | 50% |
-| Phi-4 | 100% |
-
-While all models included the key content from the input, DeepSeek-R1’s similarity score is again, significantly lower due to its verbose internal commentary.
-
-### Relevance
-
-Evaluate how well each model captures the core intent of the input. The table below shows the relevance scores for each model.
-
-| Model | Relevance score |
-|---------------|-----------------|
-| {% data variables.copilot.copilot_gpt_41 %} | 75% |
-| DeepSeek-R1 | 0% |
-| Phi-4 | 75% |
-
-{% data variables.copilot.copilot_gpt_41 %} and Phi-4 both captured the main intent of the user’s request: the need for dark mode to reduce eye strain and improve usability at night. DeepSeek-R1 scored 0% in relevance due to its verbose internal commentary that distracted from the actual output.
-
-### Groundedness
-
-Evaluate whether each model’s output stays true to the input without introducing unsupported information.
-The table below shows the relevance scores for each model.
-
-| Model | Groundedness score |
-|---------------|--------------------|
-| {% data variables.copilot.copilot_gpt_41 %} | 100% |
-| DeepSeek-R1 | 25% |
-| Phi-4 | 100% |
-
-DeepSeek-R1 scored lower due to its verbose `` block, which included speculative reasoning not present in the original input.
-
-## Save the configuration
-
-After completing your evaluations, the final step is to choose the model that performs best for your specific use case. In the examples above, Phi-4 and {% data variables.copilot.copilot_gpt_41 %} delivered strong, consistent results across all evaluators. DeepSeek-R1 scored lower due to its verbose reasoning and less focused outputs.
-
-Once you've selected your preferred model and prompt configuration, add a descriptive name to the prompt file, then click **Commit changes**. This will save the model, prompt, parameter settings, and associated dataset as a reusable configuration file in your repository.
-
-
-
-Committing your prompt configuration makes it easy to reuse, collaborate, and iterate across model setups. It makes it easier to rerun evaluations and track the performance of the prompt configuration over time.
-
-## Further reading
-
-* [AUTOTITLE](/github-models/use-github-models/storing-prompts-in-github-repositories)
-* [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models)
diff --git a/content/github-models/use-github-models/index.md b/content/github-models/use-github-models/index.md
deleted file mode 100644
index 4378528e9b7c..000000000000
--- a/content/github-models/use-github-models/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: Use GitHub Models
-intro: '{% data variables.product.prodname_github_models %} helps you go from prompt to production by testing, comparing, evaluating, and integrating AI directly in your repository.'
-versions:
- feature: github-models
-children:
- - /prototyping-with-ai-models
- - /optimizing-your-ai-powered-app-with-github-models
- - /evaluating-ai-models
- - /storing-prompts-in-github-repositories
----
diff --git a/content/github-models/use-github-models/optimizing-your-ai-powered-app-with-github-models.md b/content/github-models/use-github-models/optimizing-your-ai-powered-app-with-github-models.md
deleted file mode 100644
index c8165934e9c1..000000000000
--- a/content/github-models/use-github-models/optimizing-your-ai-powered-app-with-github-models.md
+++ /dev/null
@@ -1,175 +0,0 @@
----
-title: Optimizing your AI-powered app with Models
-shortTitle: Optimize your AI-powered app
-intro: 'Learn how to test models and refine prompts for your AI-powered application.'
-versions:
- feature: github-models
-allowTitleToDifferFromFilename: true
-category:
- - Build with AI models
----
-
-With new AI models being released regularly, choosing the right one for your application can be challenging. {% data variables.product.prodname_github_models %} helps you optimize your AI-powered application by letting you **compare different models and prompt variations** against sample inputs, while using **built-in evaluators** to validate model output.
-
-Through an example scenario, we'll build an AI-powered assistant that helps users learn how to use Git from the command line. We'll walk through comparing different models, and you'll learn how to refine prompt variations to enhance output quality.
-
->[!NOTE]
->
-> * {% data variables.product.prodname_github_models %} is in {% data variables.release-phases.public_preview %} and subject to change.
-> * Usage is rate limited. See [AUTOTITLE](/github-models/use-github-models/prototyping-with-ai-models#rate-limits).
-
-## Testing a prompt
-
-The {% data variables.product.prodname_github_models %} **Comparisons** view allows you to adjust model parameters and prompts to test model output.
-
-### 1. Creating a sample repository
-
-You can access the **Comparisons** view directly from the **Models** tab in any repository, but in this guide we'll create a new repository to use as a test environment.
-
-1. Navigate to the [new repository](https://github.com/new) page.
-1. Under "Owner", make sure your user account is selected.
-1. In the "Repository name" field, type `models-playground`.
-1. Beneath the description field, select **Private** to set the repository visibility.
-1. Click **Create repository**.
-
-### 2. Creating a new prompt
-
-1. On the main page of your new repository, click the **Models** tab.
-1. In the "Prompts" section, click **{% octicon "plus" aria-hidden="true" aria-label="plus" %} New Prompt**.
-1. In the upper-left corner, choose a model from the dropdown menu.
-
-### 3. Writing a system prompt
-
-A system prompt is a set of instructions that defines the role, behavior, and limitations of an AI model before it interacts with users. In this example, we'll be working on an AI-powered application that explains how to use Git from the command line.
-
-In the **System prompt** field, copy and paste the following text:
-
-```text copy
-You are an expert at using the Git version control system. I will ask questions looking for guidance on the best way to perform tasks using Git, and you will give clear, step-by-step answers that explain each step you are recommending.
-```
-
-> [!NOTE] If the **System** text field is not editable, try choosing a different model in the model dropdown above. Not all models allow the system prompt to be modified.
-
-### 4. Writing a user prompt
-
-The user prompt is the direct question or instruction to an AI system during their conversation, which the AI system responds to.
-
-In the **User prompt** field, copy and paste the following text:
-
- ```text copy
- I want to learn how to use Git from the command line. {{input}}
- ```
-
-### 5. Entering sample input
-
-The {% raw %}`{{input}}`{% endraw %} variable in the **User prompt** functions as a placeholder for sample input. To manage this placeholder, click the **Variables** button and enter the following text:
-
-```text copy
-When should I use rebase or merge?
-```
-
-### 6. Running the sample prompt
-
-1. In the upper-right corner, click **{% octicon "play" aria-hidden="true" aria-label="play" %} Play**.
-1. Make a change to the model or prompt, then run the prompt again to see what results you get.
-
-## Testing different models against a prompt
-
-Now, let's determine which model will work best for our application, using the **Comparisons** view. This view allows you to test different models on the same input, revealing differences in accuracy, creativity, tone, reasoning, and reliability. That will help us choose the model that best fits our needs in terms of quality, speed, cost, and consistency.
-
-1. In the upper-left corner, click **Comparisons**.
-1. To compare different models, click **{% octicon "plus" aria-hidden="true" aria-label="plus" %} Add prompt** and select **{% octicon "repo-forked" aria-hidden="true" aria-label="repo-forked" %} Copy original prompt** to duplicate your existing system and user prompts. Create at least two copies of the original prompt to evaluate three different models.
-1. Next to each prompt, click {% octicon "pencil" aria-hidden="Edit prompt" aria-label="pencil" %}. From the **Model** dropdown, choose a different model for each prompt you created.
-1. Click **{% octicon "plus" aria-hidden="true" aria-label="plus" %} Add inputs** to create new rows for sample inputs.
-
- * Click **{% octicon "plus" aria-hidden="true" aria-label="plus" %} Add inputs**. Then, in the "Input" field, copy and paste the following text:
-
- ```text copy
- How do I modify the most recent commit message in my current branch?
- ```
-
- * Click **{% octicon "plus" aria-hidden="true" aria-label="plus" %} Add inputs** again, then paste the following input:
-
- ```text copy
- How do I move a specific commit from one branch to a different branch?
- ```
-
- * Click **{% octicon "plus" aria-hidden="true" aria-label="plus" %} Add inputs** one more time, and paste this input:
-
- ```text copy
- How do I find the author of a specific commit in a repository's history?
- ```
-
-1. To run the prompts, in the upper-right corner, click **{% octicon "play" aria-hidden="true" aria-label="play" %} Run**.
-1. Try out different models against your prompt, making note of the **Latency** and the **Input** and **Output** token usage of the different models.
-
-## Testing prompt variations with a specific model
-
-If you’re building an application with a specific AI model, you need responses to be predictable and reliable. Testing prompt variations helps you to:
-
-* **Optimize performance and quality**: Slight changes in phrasing can affect the response quality. By testing variations you can find the wording that gets the best response.
-* **Clarify instructions**: By varying the phrasing of your prompt, you can identify which version the model understands most clearly.
-* **Adapt to specific model behavior**: You can tailor your input to how a specific model interprets language.
-* **Verify the format of the output**: You may want a list, a paragraph, a code block, or a specific tone. Testing prompt variation helps you enforce a specific structure or style.
-
-Now, let's use {% data variables.product.prodname_github_models %} to test prompt variations against user input for your specific model.
-
-### 1. Adding prompt variations
-
-For this example scenario, select the **same model for each column**, but provide a different prompt variation by editing the "User prompt" field of our existing prompts. Next to each prompt, click {% octicon "pencil" aria-hidden="Edit prompt" aria-label="pencil" %}.
-
-1. Click **{% octicon "pencil" aria-hidden="Edit prompt" aria-label="pencil" %}** in "Prompt 2." Then, in the "User prompt" field, copy and paste the following text:
-
- ```text copy
- I want to learn how to use Git from the command line, but explain it to me like I am five years old. {{input}}
- ```
-
-1. Click **{% octicon "pencil" aria-hidden="Edit prompt" aria-label="pencil" %}** in "Prompt 3", then paste the following input:
-
- ```text copy
- I want to learn how to use Git from the command line. Give me instructions in the form of a haiku. {{input}}
- ```
-
-### 2. Running prompt variations
-
-1. To run the prompts, in the upper-right corner, click **{% octicon "play" aria-hidden="true" aria-label="play" %} Run**.
-1. Try out different prompt variations, and compare the types of output the model gives you.
-
-## Evaluating model output
-
-We’ve tested different models and prompt variations in {% data variables.product.prodname_github_models %}, and the next step is interpreting and comparing the results to make informed decisions for our AI-powered application.
-
-As you ran the models in the example scenarios, the **Input** and **Output** token usage and **Latency** were displayed after each run. Token usage matters because it directly affects **cost, performance, and model limitations.**
-
-* Since most models charge per token both for input and output, using more tokens increases your cost.
-* Each model also has a maximum token limit (called a context window), and exceeding it can result in errors or truncated responses.
-* Longer prompts can slow down response time or reduce clarity, while concise prompts often lead to better, more efficient outputs.
-
-Using {% data variables.product.prodname_github_models %} to test token usage and latency helps you stay within limits, manage costs, and improve overall effectiveness of your AI-powered application.
-
-### Using evaluators to judge output
-
-Depending on the number of prompts and models you are evaluating, the model output can be overwhelming to sort through manually. To help assess the quality of each model's output, you can use **Evaluators** to score results across key dimensions like clarity, accuracy, and relevance. You can define your own evaluation criteria, or use built-in evaluators to automatically rate outputs, making it easier to identify the best-performing model and prompt variation.
-
-For this example scenario, let's use the **String check** evaluator to check for a string in the output.
-
-1. In the lower-right corner of the **Prompts** field, click **{% octicon "plus" aria-hidden="true" aria-label="plus" %} Add evaluator** and select **{% octicon "note" aria-hidden="true" aria-label="note" %} String check**.
-1. In the **Name** field, enter "Amend check", then copy and paste the following input for the **Value** field:
-
- ```text copy
- git commit --amend
- ```
-
-1. To run the prompts, in the upper-right corner, click **{% octicon "play" aria-hidden="true" aria-label="play" %} Run**.
-1. The prompt output will now show a **Pass** or **Fail** label, letting you know which model contained the required string.
-
-To learn more about the pre-built evaluators like similarity, groundedness, and relevance, see [AUTOTITLE](/github-models/use-github-models/evaluating-ai-models#evaluating-outputs).
-
-## Next steps
-
-Now that you've explored how to test models, refine prompts, and evaluate outputs using {% data variables.product.prodname_github_models %}, you're ready to start building prompts for your AI-powered application. After creating a prompt, you can store, version, and share it by committing a `.prompt.yml` file to your repository. This keeps your prompts under version control, and enables easy collaboration on prompt and model refinement. For more information, see [AUTOTITLE](/github-models/use-github-models/storing-prompts-in-github-repositories).
-
-## Join the community
-
-To ask questions and share feedback, see this [GitHub Models discussion post](https://github.com/orgs/community/discussions/159087).
-To learn how others are using {% data variables.product.prodname_github_models %}, visit the [GitHub Community discussions for Models](https://github.com/orgs/community/discussions/categories/models).
diff --git a/content/github-models/use-github-models/prototyping-with-ai-models.md b/content/github-models/use-github-models/prototyping-with-ai-models.md
deleted file mode 100644
index a032b555ca61..000000000000
--- a/content/github-models/use-github-models/prototyping-with-ai-models.md
+++ /dev/null
@@ -1,427 +0,0 @@
----
-title: Prototyping with AI models
-shortTitle: Prototype with AI models
-intro: 'Find and experiment with AI models for free.'
-versions:
- feature: github-models
-redirect_from:
- - /github-models/prototyping-with-ai-models
-category:
- - Build with AI models
----
-
-If you want to develop a generative AI application, you can use {% data variables.product.prodname_github_models %} to find and experiment with AI models for free. Once you are ready to bring your application to production, [opt in to paid usage](/billing/concepts/product-billing/github-models) for your enterprise.
-
-Organization owners can integrate their preferred custom models into {% data variables.product.prodname_github_models %}, by using an organization's own LLM API keys. See [AUTOTITLE](/github-models/github-models-at-scale/using-your-own-api-keys-in-github-models).
-
-See also [AUTOTITLE](/github-models/responsible-use-of-github-models).
-
-## Finding AI models
-
-To find an AI model:
-
-{% data reusables.models.steps-to-open-model-playground %}
-
-The model is opened in the model playground. Details of the model are displayed in the sidebar on the right. If the sidebar is not displayed, expand it by clicking the **{% octicon "sidebar-expand" aria-label="Show parameters setting" %}** icon at the right of the playground.
-
-> [!NOTE] Access to OpenAI's models is in {% data variables.release-phases.public_preview %} and subject to change.
-
-## Experimenting with AI models in the playground
-
-The AI model playground is a free resource that allows you to adjust model parameters and submit prompts to see how a model responds.
-
->[!NOTE]
->
-> * The model playground is in {% data variables.release-phases.public_preview %} and subject to change.
-> * The playground is rate limited. See [Rate limits](#rate-limits) below.
-
-To adjust parameters for the model, in the playground, select the **Parameters** tab in the sidebar.
-
-To see code that corresponds to the parameters that you selected, switch from the **Chat** tab to the **Code** tab.
-
-
-
-### Comparing models
-
-You can submit a prompt to two models at the same time and compare the responses.
-
-With one model open in the playground, click **Compare**, then, in the dropdown menu, select a model for comparison. The selected model opens in a second chat window. When you type a prompt in either chat window, the prompt is mirrored to the other window. The prompts are submitted simultaneously so that you can compare the responses from each model.
-
-Any parameters you set are used for both models.
-
-## Evaluating AI models
-
-Once you've started testing prompts in the playground, you can evaluate model performance using structured metrics. Evaluations help you compare multiple prompt configurations across different models and determine which setup performs best.
-
-In the Comparisons view, you can apply evaluators like similarity, relevance, and groundedness to measure how well each output meets your expectations. You can also define your own evaluation criteria with a custom prompt evaluator.
-
-For step-by-step instructions, see [Evaluating outputs](/github-models/use-github-models/evaluating-ai-models#evaluating-outputs).
-
-## Experimenting with AI models using the API
-
->[!NOTE]
->
-> The free API usage is in {% data variables.release-phases.public_preview %} and subject to change.
-
-{% data variables.product.company_short %} provides free API usage so that you can experiment with AI models in your own application.
-
-The steps to use each model are similar. In general, you will need to:
-
-{% data reusables.models.steps-to-open-model-playground %}
-
- The model opens in the model playground.
-
-1. Click the **Code** tab.
-1. Optionally, use the language dropdown to select the programming language.
-1. Optionally, use the SDK dropdown to select which SDK to use.
-
- All models can be used with the Azure AI Inference SDK, and some models support additional SDKs. If you want to easily switch between models, you should select "Azure AI Inference SDK." If you selected "REST" as the language, you won't use an SDK. Instead, you will use the API endpoint directly. {% ifversion fpt %} See [{% data variables.product.prodname_github_models %} REST API](/rest/models?apiVersion=2022-11-28). {% endif %}
-1. Either open a codespace, or set up your local environment:
- * To run in a codespace, click **{% octicon "codespaces" aria-hidden="true" aria-label="codespaces" %} Run codespace**, then click **Create new codespace**.
- * To run locally:
- * Create a {% data variables.product.company_short %} {% data variables.product.pat_generic %}. The token needs to have `models:read` permissions. See [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).
- * Save your token as an environment variable.
- * Install the dependencies for the SDK, if required.
-1. Use the example code to make a request to the model.
-
-The free API usage is rate limited. See [Rate limits](#rate-limits) below.
-
-## Saving and sharing your playground experiments
-
-You can save and share your progress in the playground with presets. Presets save:
-* Your current state
-* Your parameters
-* Your chat history (optional)
-
-To create a preset for your current context, select **Preset: PRESET-NAME** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} at the top right of the playground, then click **{% octicon "plus" aria-hidden="true" aria-label="plus" %} Create new preset**. You need to name your preset, and you can also choose to provide a preset description, include your chat history, and allow your preset to be shared.
-
-There are two ways to load a preset:
-* Select the **Preset: PRESET-NAME** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu, then click the preset you want to load.
-* Open a shared preset URL
-
-After you load a preset, you can edit, share, or delete the preset:
-* To edit the preset, change the parameters and prompt the model. Once you are satisfied with your changes, select the **Preset: PRESET-NAME** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu, then click **{% octicon "pencil" aria-hidden="true" aria-label="pencil" %} Edit preset** and save your updates.
-* To share the preset, select the **Preset: PRESET-NAME** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu, then click **{% octicon "share" aria-hidden="true" aria-label="share" %} Share preset** to get a shareable URL.
-* To delete the preset, select the **Preset: PRESET-NAME** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu, then click **{% octicon "trash" aria-hidden="true" aria-label="trash" %} Delete preset** and confirm the deletion.
-
-## Using the prompt editor
-
-The prompt editor in {% data variables.product.prodname_github_models %} is designed to help you iterate, refine, and perfect your prompts. This dedicated view provides a focused and intuitive experience for crafting and testing inputs, enabling you to:
-
-* Quickly test and refine prompts without the complexity of multi-turn interactions.
-* Fine-tune prompts for precision and relevance in your projects.
-* Use a specialized space for single-turn scenarios to ensure consistent and optimized results.
-
-To access the prompt editor, click **{% octicon "stack" aria-hidden="true" aria-label="stack" %} Prompt editor** at the top right of the playground.
-
-
-
-## Experimenting with AI models in {% data variables.product.prodname_vscode %}
-
-> [!NOTE] The AI Toolkit extension for {% data variables.product.prodname_vscode %} is in {% data variables.release-phases.public_preview %} and is subject to change.
-
-If you prefer to experiment with AI models in your IDE, you can install the AI Toolkit extension for {% data variables.product.prodname_vscode %}, then test models with adjustable parameters and context.
-
-1. In {% data variables.product.prodname_vscode %}, install the pre-release version of the [AI Toolkit for {% data variables.product.prodname_vscode %}](https://marketplace.visualstudio.com/items?itemName=ms-windows-ai-studio.windows-ai-studio).
-1. To open the extension, click the AI Toolkit icon in the activity bar.
-1. Authorize the AI Toolkit to connect to your {% data variables.product.prodname_dotcom %} account.
-1. In the "My models" section of the AI Toolkit panel, click **Open Model Catalog**, then find a model to experiment with.
- * To use a model hosted remotely through {% data variables.product.prodname_github_models %}, on the model card, click **Try in playground**.
- * To download and use a model locally, on the model card, click **Download**. Once the download is complete, on the same model card, click **Load in playground**.
-
-1. In the sidebar, provide any context instructions and inference parameters for the model, then send a prompt.
-
-## Going to production
-
-The free rate limits provided in the playground and API usage are intended to help you get started with experimentation. When you are ready to move beyond the free offering, you have two options for accessing AI models beyond the free limits:
-* You can opt in to paid usage for {% data variables.product.prodname_github_models %}, allowing your organization to access increased rate limits, larger context windows, and additional features. See [AUTOTITLE](/billing/concepts/product-billing/github-models).
-* If you have an existing OpenAI or Azure subscription, you can bring your own API keys (BYOK) to access custom models. Billing and usage are managed directly through your provider account, such as your Azure Subscription ID. See [AUTOTITLE](/github-models/github-models-at-scale/using-your-own-api-keys-in-github-models).
-
-## Rate limits
-
-{% data reusables.github-models.production-rate-limits-note %}
-
-The playground and free API usage are rate limited by requests per minute, requests per day, tokens per request, and concurrent requests. If you get rate limited, you will need to wait for the rate limit that you hit to reset before you can make more requests.
-
-Low, high, and embedding models have different rate limits. To see which type of model you are using, refer to the model's information in {% data variables.product.prodname_marketplace %}.
-
-For custom models accessed with your own API keys, rate limits are set and enforced by your model provider.
-
-
-
- Rate limit tier
- Rate limits
- Copilot Free
- Copilot Pro
- Copilot Business
- Copilot Enterprise
-
-
- Low
- Requests per minute
- 15
- 15
- 15
- 20
-
-
- Requests per day
- 150
- 150
- 300
- 450
-
-
- Tokens per request
- 8000 in, 4000 out
- 8000 in, 4000 out
- 8000 in, 4000 out
- 8000 in, 8000 out
-
-
- Concurrent requests
- 5
- 5
- 5
- 8
-
-
- High
- Requests per minute
- 10
- 10
- 10
- 15
-
-
- Requests per day
- 50
- 50
- 100
- 150
-
-
- Tokens per request
- 8000 in, 4000 out
- 8000 in, 4000 out
- 8000 in, 4000 out
- 16000 in, 8000 out
-
-
- Concurrent requests
- 2
- 2
- 2
- 4
-
-
- Embedding
- Requests per minute
- 15
- 15
- 15
- 20
-
-
- Requests per day
- 150
- 150
- 300
- 450
-
-
- Tokens per request
- 64000
- 64000
- 64000
- 64000
-
-
- Concurrent requests
- 5
- 5
- 5
- 8
-
-
- Azure OpenAI o1-preview
- Requests per minute
- Not applicable
- 1
- 2
- 2
-
-
- Requests per day
- Not applicable
- 8
- 10
- 12
-
-
- Tokens per request
- Not applicable
- 4000 in, 4000 out
- 4000 in, 4000 out
- 4000 in, 8000 out
-
-
- Concurrent requests
- Not applicable
- 1
- 1
- 1
-
-
- Azure OpenAI o1, o3, and gpt-5
- Requests per minute
- Not applicable
- 1
- 2
- 2
-
-
- Requests per day
- Not applicable
- 8
- 10
- 12
-
-
- Tokens per request
- Not applicable
- 4000 in, 4000 out
- 4000 in, 4000 out
- 4000 in, 8000 out
-
-
- Concurrent requests
- Not applicable
- 1
- 1
- 1
-
-
- Azure OpenAI o1-mini, o3-mini, o4-mini, gpt-5-mini, gpt-5-nano, and gpt-5-chat
- Requests per minute
- Not applicable
- 2
- 3
- 3
-
-
- Requests per day
- Not applicable
- 12
- 15
- 20
-
-
- Tokens per request
- Not applicable
- 4000 in, 4000 out
- 4000 in, 4000 out
- 4000 in, 4000 out
-
-
- Concurrent requests
- Not applicable
- 1
- 1
- 1
-
-
- DeepSeek-R1, DeepSeek-R1-0528, and MAI-DS-R1
- Requests per minute
- 1
- 1
- 2
- 2
-
-
- Requests per day
- 8
- 8
- 10
- 12
-
-
- Tokens per request
- 4000 in, 4000 out
- 4000 in, 4000 out
- 4000 in, 4000 out
- 4000 in, 4000 out
-
-
- Concurrent requests
- 1
- 1
- 1
- 1
-
-
- xAI Grok-3
- Requests per minute
- 1
- 1
- 2
- 2
-
-
- Requests per day
- 15
- 15
- 20
- 30
-
-
- Tokens per request
- 4000 in, 4000 out
- 4000 in, 4000 out
- 4000 in, 8000 out
- 4000 in, 16000 out
-
-
- Concurrent requests
- 1
- 1
- 1
- 1
-
-
- xAI Grok-3-Mini
- Requests per minute
- 2
- 2
- 3
- 3
-
-
- Requests per day
- 30
- 30
- 40
- 50
-
-
- Tokens per request
- 4000 in, 8000 out
- 4000 in, 8000 out
- 4000 in, 12000 out
- 4000 in, 12000 out
-
-
- Concurrent requests
- 1
- 1
- 1
- 1
-
-
-
-These limits are subject to change without notice.
-
-## Leaving feedback
-
-To ask questions and share feedback, see this [GitHub Models discussion post](https://github.com/orgs/community/discussions/159087).
-To learn how others are using {% data variables.product.prodname_github_models %}, visit the [GitHub Community discussions for Models](https://github.com/orgs/community/discussions/categories/models).
diff --git a/content/github-models/use-github-models/storing-prompts-in-github-repositories.md b/content/github-models/use-github-models/storing-prompts-in-github-repositories.md
deleted file mode 100644
index 36ab5d72d27b..000000000000
--- a/content/github-models/use-github-models/storing-prompts-in-github-repositories.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: Storing prompts in GitHub repositories
-shortTitle: Store prompts
-intro: 'Store prompts directly in your GitHub repositories to leverage automated text summarization and other AI-driven functionalities.'
-allowTitleToDifferFromFilename: true
-versions:
- fpt: '*'
- ghec: '*'
-category:
- - Build with AI models
----
-
-Prompts can be stored as files directly within {% data variables.product.github %} repositories. This unlocks the ability to view your prompts in an organized UI, share them with non-technical stakeholders, and run seamless iterations and comparisons on adjustments to models and prompts.
-
-## Benefits
-
-* Easy integration with the new suite of AI development tools directly on {% data variables.product.github %}.
-* Simple and scalable from simple to complex use cases.
-* Uses a widely supported format, compatible with existing tools.
-
-## Supported file format
-
-Store prompts in YAML files.
-
-The file can be located anywhere in your repository, but _must have the extension `.prompt.yml` or `.prompt.yaml`._
-
-Example:
-
-``` yaml copy
-name: Text Summarizer
-description: Summarizes input text concisely
-model: openai/gpt-4o-mini
-modelParameters:
- temperature: 0.5
-messages:
- - role: system
- content: You are a text summarizer. Your only job is to summarize text given to you.
- - role: user
- content: |
- Summarize the given text, beginning with "Summary -":
-
- {% raw %}{{input}}{% endraw %}
-
-testData:
- - input: |
- The quick brown fox jumped over the lazy dog.
- The dog was too tired to react.
- expected: Summary - A fox jumped over a lazy, unresponsive dog.
-evaluators:
- - name: Output should start with 'Summary -'
- string:
- startsWith: 'Summary -'
-```
-
-## Prompt structure
-
-Prompts have two key parts:
-
-* **Runtime information** (required)
- * Prompt templates (system, user, etc.) using simple {% raw %}`{{variable}}`{% endraw %} placeholders
-* **Development information** (optional)
- * Human-readable name and description
- * Model identifier and parameters
- * Sample data for testing and evaluations
- * Data describing the evaluators themselves
-
-## Limitations
-
-You cannot store prompts for:
-
-* Complex templating languages
-* Proprietary or complex file formats (such as `.ghprompt`, or `.prompty`)
diff --git a/content/index.md b/content/index.md
index c0d2da00db54..36ea43f772ac 100644
--- a/content/index.md
+++ b/content/index.md
@@ -157,7 +157,6 @@ childGroups:
- rest
- graphql
- webhooks
- - github-models
- name: Community
octicon: GlobeIcon
children:
diff --git a/content/integrations/concepts/about-building-integrations.md b/content/integrations/concepts/about-building-integrations.md
index 96308a29501f..7e62f827d59f 100644
--- a/content/integrations/concepts/about-building-integrations.md
+++ b/content/integrations/concepts/about-building-integrations.md
@@ -32,5 +32,5 @@ Your integration can use webhooks to learn when specific events happen on {% dat
{% ifversion fpt or ghec %} If your integration is a {% data variables.product.prodname_github_app %} or custom action, you can publish your integration on {% data variables.product.prodname_marketplace %}. For more information, see [AUTOTITLE](/apps/github-marketplace/github-marketplace-overview/about-github-marketplace-for-apps) and [AUTOTITLE](/actions/how-tos/create-and-publish-actions/publish-in-github-marketplace).{% endif %}
{% ifversion fpt or ghec %}
-If your integration uses generative AI, you can find and experiment with AI models for free on {% data variables.product.company_short %}. See [AUTOTITLE](/github-models/use-github-models/prototyping-with-ai-models).
+If your integration uses generative AI, you can build AI-powered workflows on {% data variables.product.company_short %} with {% data variables.product.prodname_copilot %}. See [AUTOTITLE](/copilot).
{% endif %}
diff --git a/content/organizations/managing-organization-settings/index.md b/content/organizations/managing-organization-settings/index.md
index 825900c550f9..4391270e6395 100644
--- a/content/organizations/managing-organization-settings/index.md
+++ b/content/organizations/managing-organization-settings/index.md
@@ -53,7 +53,6 @@ children:
- /creating-rulesets-for-repositories-in-your-organization
- /managing-rulesets-for-repositories-in-your-organization
- /managing-custom-properties-for-repositories-in-your-organization
- - /managing-or-restricting-github-models-for-your-organization
shortTitle: Manage organization settings
---
diff --git a/content/organizations/managing-organization-settings/managing-or-restricting-github-models-for-your-organization.md b/content/organizations/managing-organization-settings/managing-or-restricting-github-models-for-your-organization.md
deleted file mode 100644
index d3dcf3fee196..000000000000
--- a/content/organizations/managing-organization-settings/managing-or-restricting-github-models-for-your-organization.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Managing or restricting {% data variables.product.prodname_github_models %} in your organization
-shortTitle: Manage or restrict models
-intro: You can enable, disable, and restrict the use of {% data variables.product.prodname_github_models %} for an organization.
-versions:
- feature: github-models
-permissions: 'Organization owners'
-allowTitleToDifferFromFilename: true
-category:
- - Configure organization features
----
-
-{% data reusables.models.models-preview-note %}
-
-## About {% data variables.product.prodname_github_models %}
-
-{% data reusables.models.feature-overview %}
-
-## Prerequisites
-
-{% data reusables.models.prereq-enable-models-in-enterprise %} See [Enabling {% data variables.product.prodname_github_models %} for an enterprise](/github-models/github-models-at-scale/manage-models-at-scale#enabling-github-models-for-an-enterprise).
-
-## Enabling or restricting models in your organization
-
-{% data reusables.models.enable-select-models-intro %}
-
-{% data reusables.models.enable-select-models-in-org %}
diff --git a/content/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/index.md b/content/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/index.md
index 4bbaca058f82..4af79156b1a9 100644
--- a/content/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/index.md
+++ b/content/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/index.md
@@ -18,7 +18,6 @@ children:
- /about-email-notifications-for-pushes-to-your-repository
- /configuring-autolinks-to-reference-external-resources
- /managing-auto-closing-issues
- - /managing-github-models-in-your-repository
shortTitle: Manage repository settings
---
diff --git a/content/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-github-models-in-your-repository.md b/content/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-github-models-in-your-repository.md
deleted file mode 100644
index 0b00ed37f302..000000000000
--- a/content/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-github-models-in-your-repository.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Managing {% data variables.product.prodname_github_models %} in your repository
-shortTitle: Manage models
-intro: You can enable or disable {% data variables.product.prodname_github_models %} in your repository.
-versions:
- feature: github-models
-permissions: 'Repository administrators'
-allowTitleToDifferFromFilename: true
-category:
- - Manage access and repository policies
----
-
-{% data reusables.models.models-preview-note %}
-
-## About {% data variables.product.prodname_github_models %}
-
-{% data reusables.models.feature-overview %}
-
-## Prerequisites
-
-If your repository is organization-owned, an organization owner must first enable {% data variables.product.prodname_github_models %} in your organization.
-
-If your organization owner has restricted access to certain models, you will only see a subset of the total available models.
-
-If the repository is owned by a user, that user has access to all the available models for that repository.
-
-## Enabling or disabling models in your repository
-
-{% data reusables.repositories.navigate-to-repo %}
-{% data reusables.repositories.sidebar-settings %}
-1. Under "Code and automation, select **Models**.
-1. In the "Models in this repository" section, click {% octicon "chevron-down" aria-label="the down arrow" %} beside **Disabled** and select **Enabled** from the dropdown.
-{% data reusables.repositories.navigate-to-models %}
-1. You can choose a model, create and test prompts, compare prompts and models, as well as experiment in the playgound. See [AUTOTITLE](/github-models/use-github-models/prototyping-with-ai-models).
diff --git a/content/rest/index.md b/content/rest/index.md
index 358968f5be91..0b8c3820f658 100644
--- a/content/rest/index.md
+++ b/content/rest/index.md
@@ -85,7 +85,6 @@ children:
- /meta
- /metrics
- /migrations
- - /models
- /oauth-authorizations
- /orgs
- /packages
diff --git a/content/rest/models/catalog.md b/content/rest/models/catalog.md
deleted file mode 100644
index aa0081d7aeeb..000000000000
--- a/content/rest/models/catalog.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: REST API endpoints for models catalog
-shortTitle: Catalog
-intro: Use the REST API to get a list of models available for use, including details like ID, supported input/output modalities, and rate limits.
-versions: # DO NOT MANUALLY EDIT. CHANGES WILL BE OVERWRITTEN BY A 🤖
- fpt: '*'
-autogenerated: rest
-allowTitleToDifferFromFilename: true
-category:
- - Use Copilot and AI services
----
-
-## About {% data variables.product.prodname_github_models %} catalog
-
-You can use the REST API to explore available models in the {% data variables.product.prodname_github_models %} catalog.
-
-
diff --git a/content/rest/models/embeddings.md b/content/rest/models/embeddings.md
deleted file mode 100644
index 636e16e04c27..000000000000
--- a/content/rest/models/embeddings.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: REST API endpoints for model embeddings
-shortTitle: Embeddings
-intro: Use the REST API to work with embedding requests for models.
-versions: # DO NOT MANUALLY EDIT. CHANGES WILL BE OVERWRITTEN BY A 🤖
- fpt: '*'
-autogenerated: rest
-allowTitleToDifferFromFilename: true
-category:
- - Use Copilot and AI services
----
-
-
diff --git a/content/rest/models/index.md b/content/rest/models/index.md
deleted file mode 100644
index 83f6bf3cc005..000000000000
--- a/content/rest/models/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Models
-autogenerated: rest
-allowTitleToDifferFromFilename: true
-children:
- - /catalog
- - /embeddings
- - /inference
-versions:
- fpt: '*'
----
-
diff --git a/content/rest/models/inference.md b/content/rest/models/inference.md
deleted file mode 100644
index e2080acf22e8..000000000000
--- a/content/rest/models/inference.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: REST API endpoints for models inference
-shortTitle: Inference
-intro: Use the REST API to submit a chat completion request to a specified model, with or without organizational attribution.
-versions: # DO NOT MANUALLY EDIT. CHANGES WILL BE OVERWRITTEN BY A 🤖
- fpt: '*'
-autogenerated: rest
-allowTitleToDifferFromFilename: true
-category:
- - Use Copilot and AI services
----
-
-## About {% data variables.product.prodname_github_models %} inference
-
-You can use the REST API to run inference requests using the {% data variables.product.prodname_github_models %} platform. The API requires the `models: read` scope when using a {% data variables.product.pat_v2 %} or when authenticating using a {% data variables.product.prodname_github_app %}.
-
-The API supports:
-
-* Accessing top models from OpenAI, DeepSeek, Microsoft, Llama, and more.
-* Running chat-based inference requests with full control over sampling and response parameters.
-* Streaming or non-streaming completions.
-* Organizational attribution and usage tracking.
-
-
diff --git a/content/search-github/searching-on-github/index.md b/content/search-github/searching-on-github/index.md
index 2b07946fe617..4f3c10f06ac4 100644
--- a/content/search-github/searching-on-github/index.md
+++ b/content/search-github/searching-on-github/index.md
@@ -17,7 +17,6 @@ children:
- /searching-issues-and-pull-requests
- /searching-discussions
- /searching-github-marketplace
- - /searching-github-models
- /searching-users
- /searching-for-packages
- /searching-wikis
diff --git a/content/search-github/searching-on-github/searching-github-marketplace.md b/content/search-github/searching-on-github/searching-github-marketplace.md
index 4f47fc206648..82f4d685dcc5 100644
--- a/content/search-github/searching-on-github/searching-github-marketplace.md
+++ b/content/search-github/searching-on-github/searching-github-marketplace.md
@@ -36,9 +36,6 @@ Anytime you search across all of {% data variables.product.prodname_dotcom %}, y
## Further reading
-{%- ifversion fpt %}
-* [AUTOTITLE](/search-github/searching-on-github/searching-github-models)
-{%- endif %}
* [AUTOTITLE](/actions/how-tos/write-workflows/choose-what-workflows-do/find-and-customize-actions)
* [AUTOTITLE](/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-personal-account)
* [AUTOTITLE](/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-organizations)
diff --git a/content/search-github/searching-on-github/searching-github-models.md b/content/search-github/searching-on-github/searching-github-models.md
deleted file mode 100644
index d8ade0f33708..000000000000
--- a/content/search-github/searching-on-github/searching-github-models.md
+++ /dev/null
@@ -1,139 +0,0 @@
----
-title: Searching GitHub Models
-intro: 'You can search for models that are available on {% data variables.product.prodname_github_models %}.'
-versions:
- feature: github-models
-shortTitle: Search GitHub Models
-category:
- - Find repositories and resources
----
-
-## About searching {% data variables.product.prodname_github_models %}
-
-You can find models on {% data variables.product.prodname_github_models %} in two ways:
-
-* Search from {% data variables.product.prodname_marketplace %}.
-* Search across all of {% data variables.product.prodname_dotcom %} and then filter the results to Marketplace.
-
-## Searching in {% data variables.product.prodname_marketplace %}
-
-{% data reusables.marketplace.visit-marketplace %}
-1. Type any keywords and `type:models` and press **Enter**.
-
-## Searching across {% data variables.product.prodname_dotcom %}
-
-Anytime you search across all of {% data variables.product.prodname_dotcom %}, you can filter the results to see matching models from {% data variables.product.prodname_marketplace %}.
-
-1. Navigate to https://github.com/search.
-1. Type any keywords and press **Enter**.
-1. To see all available filters for your search, in the "Filter by" sidebar, click **More**.
-1. To see results from {% data variables.product.prodname_github_models %}, click **Marketplace**.
-
-## Searching within a specific field
-
-The `in` qualifier used in conjunction with search text finds models that match the specified text in that field. Possible fields include `tags`, `license`, `name`, `description`, `transparency`, and `task`.
-
-|Qualifier|Example|
-|---|---|
-|in:FIELD | [**in:tags agents**](https://github.com/search?q=in:tags+agents&type=marketplace) matches models with the 'agents' tag.
-|in:FIELD | [**in:license distribute**](https://github.com/search?q=in:license+distribute&type=marketplace) matches models who mention 'distribute' in their license.
-|in:FIELD | [**in:transparency "responsible ai"**](https://github.com/search?q=in:transparency+%22responsible+ai%22&type=marketplace) matches models who mention 'responsible ai' in their transparency information.
-
-## Search by category
-
-The `category` qualifier finds models that are tagged with a specific term.
-
-|Qualifier|Example|
-|---|---|
-|category:CATEGORY | [**category:multilingual**](https://github.com/search?q=category:multilingual&type=marketplace) matches models in the multilingual category.
-|category:CATEGORY | [**category:"large context"**](https://github.com/search?q=category:%22large+context%22+&type=marketplace) matches models in the large context category.
-
-## Search by input modality
-
-The `input-modality` qualifier finds models that support a particular medium for providing input. Possible modalities include `text`, `image`, and `audio`.
-
-|Qualifier|Example|
-|---|---|
-|input-modality:MODALITY | [**input-modality:text**](https://github.com/search?q=input-modality:text&type=marketplace) matches models that support text input.
-
-## Search by output modality
-
-The `output-modality` qualifier finds models that support a particular medium for providing output. Possible modalities include `text` and `embeddings`.
-
-|Qualifier|Example|
-|---|---|
-|output-modality:MODALITY | [**output-modality:embeddings**](https://github.com/search?q=output-modality:embeddings&type=marketplace) matches models that support embedding output.
-
-## Search by language
-
-The `language` qualifier finds models that support a specified human language.
-
-|Qualifier|Example|
-|---|---|
-|language:TWO_CHARACTER_CODE | [**language:es**](https://github.com/search?q=language:es&type=marketplace) matches models that support Spanish.
-|language:NAME | [**language:arabic**](https://github.com/search?q=language:arabic&type=marketplace) matches models that support Arabic.
-
-## Search by task
-
-The `task` qualifier finds models that can be used to accomplish a specific task.
-
-|Qualifier|Example|
-|---|---|
-|task:TASK | [**task:embeddings**](https://github.com/search?q=task:embeddings&type=marketplace) matches models that support embedding.
-|task:TASK | [**task:chat-completion**](https://github.com/search?q=task:chat-completion&type=marketplace) matches models that support interaction via chat.
-
-## Search by publisher
-
-The `publisher` qualifier finds models released by a particular publisher.
-
-|Qualifier|Example|
-|---|---|
-|publisher:PUBLISHER_NAME | [**publisher:"Mistral AI"**](https://github.com/search?q=publisher:%22Mistral+AI%22&type=marketplace) matches models by Mistral AI.
-
-## Search by input token limit
-
-The `input-tokens` qualifier finds models with an input token limit above or below a particular value, or within a range.
-
-|Qualifier|Example|
-|---|---|
-|input-tokens:VALUE | [**input-tokens:>10000**](https://github.com/search?q=input-tokens:%3E10000&type=marketplace) matches models with an input token limit greater than 10,000.
-|input-tokens:VALUE | [**input-tokens:15000..20000**](https://github.com/search?q=input-tokens:15000..20000&type=marketplace) matches models with an input token limit between 15,000 and 20,000.
-
-## Search by output token limit
-
-The `output-tokens` qualifier finds models with an output token limit above or below a particular value, or within a range.
-
-|Qualifier|Example|
-|---|---|
-|output-tokens:VALUE | [**output-tokens:<8000**](https://github.com/search?q=output-tokens:%3C8000&type=marketplace) matches models with an output token limit less than 8,000.
-|output-tokens:VALUE | [**output-tokens:15000..20000**](https://github.com/search?q=output-tokens:15000..20000&type=marketplace) matches models with an output token limit between 15,000 and 20,000.
-
-## Search by rate limit tier
-
-The `rate-limit-tier` qualifier finds models with a particular tier of rate limit. Possible tiers include `low`, `high`, and `custom`.
-
-|Qualifier|Example|
-|---|---|
-|rate-limit-tier:TIER | [**rate-limit-tier:low**](https://github.com/search?q=rate-limit-tier:low&type=marketplace) matches models with a low rate limit tier.
-
-## Search by license type
-
-The `license` qualifier finds models that use a particular license.
-
-|Qualifier|Example|
-|---|---|
-|license:LICENSE | [**license:mit**](https://github.com/search?q=license:mit&type=marketplace) matches models that use the MIT license.
-|license:LICENSE | [**license:custom**](https://github.com/search?q=license:custom&type=marketplace) matches models that use a custom license.
-
-## Sorting results
-
-The `sort` qualifier is used to sort results. It can be used alone or combined with other qualifiers and search text.
-
-|Qualifier|Example|
-|---|---|
-|sort:FIELD | [**sort:created-desc publisher:meta**](https://github.com/search?q=sort:created-desc+publisher:meta&type=marketplace) matches models published by Meta, sorted with the most recently added first.
-|sort:FIELD | [**sort:name-asc in:task chat-completion**](https://github.com/search?q=sort:name-asc+in:task+chat-completion&type=marketplace) matches models that allow chat completion, sorted alphabetically.
-
-## Further reading
-
-* [AUTOTITLE](/search-github/getting-started-with-searching-on-github/sorting-search-results)
diff --git a/content/site-policy/github-terms/github-terms-for-additional-products-and-features.md b/content/site-policy/github-terms/github-terms-for-additional-products-and-features.md
index 4494a579f511..f61e64524ee5 100644
--- a/content/site-policy/github-terms/github-terms-for-additional-products-and-features.md
+++ b/content/site-policy/github-terms/github-terms-for-additional-products-and-features.md
@@ -147,9 +147,3 @@ GitHub Sponsors allows the developer community to financially support the people
## SQL Server Images
You may download Microsoft SQL Server Standard Edition container image for Linux files ("SQL Server Images"). You must uninstall the SQL Server Images when your right to use the Software ends. Microsoft Corporation may disable SQL Server Images at any time.
-
-## GitHub Models
-
-GitHub Models is a feature that allows you to learn, try, and test artificial intelligence models on GitHub.com. You can access GitHub Models via the [GitHub Marketplace](https://github.com/marketplace). Learn more about GitHub Models by visiting [Prototyping with AI models](/github-models/use-github-models/prototyping-with-ai-models).
-
-Your use of this feature is subject to the terms of the company hosting the model and the model license.
diff --git a/data/reusables/actions/github-token-available-permissions.md b/data/reusables/actions/github-token-available-permissions.md
index 7b670692e4cf..485026b2fc1c 100644
--- a/data/reusables/actions/github-token-available-permissions.md
+++ b/data/reusables/actions/github-token-available-permissions.md
@@ -10,8 +10,7 @@ permissions:
contents: read|write|none
deployments: read|write|none{% ifversion fpt or ghec %}
id-token: write|none{% endif %}
- issues: read|write|none{% ifversion not ghes %}
- models: read|none{% endif %}
+ issues: read|write|none
discussions: read|write|none
packages: read|write|none
pages: read|write|none
diff --git a/data/reusables/actions/github-token-scope-descriptions.md b/data/reusables/actions/github-token-scope-descriptions.md
index 995d7fd782a0..e0fa148398ef 100644
--- a/data/reusables/actions/github-token-scope-descriptions.md
+++ b/data/reusables/actions/github-token-scope-descriptions.md
@@ -22,9 +22,6 @@ Available permissions and details of what each allows an action to do:
| `id-token` | Fetch an OpenID Connect (OIDC) token. This requires `id-token: write`. For more information, see [AUTOTITLE](/actions/concepts/security/openid-connect#updating-your-workflows-for-oidc) |
| {% endif %} |
| `issues` | Work with issues. For example, `issues: write` permits an action to add a comment to an issue. For more information, see [AUTOTITLE](/rest/authentication/permissions-required-for-github-apps?apiVersion=2022-11-28#repository-permissions-for-issues). |
-| {% ifversion not ghes %} |
-| `models` | Generate AI inference responses with {% data variables.product.prodname_github_models %}. For example, `models: read` permits an action to use the {% data variables.product.prodname_github_models %} inference API. See [AUTOTITLE](/github-models/use-github-models/prototyping-with-ai-models). |
-| {% endif %} |
| `packages` | Work with GitHub Packages. For example, `packages: write` permits an action to upload and publish packages on GitHub Packages. For more information, see [AUTOTITLE](/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries). |
| `pages` | Work with GitHub Pages. For example, `pages: write` permits an action to request a GitHub Pages build. For more information, see [AUTOTITLE](/rest/authentication/permissions-required-for-github-apps?apiVersion=2022-11-28#repository-permissions-for-pages). |
| `pull-requests` | Work with pull requests. For example, `pull-requests: write` permits an action to add a label to a pull request. For more information, see [AUTOTITLE](/rest/authentication/permissions-required-for-github-apps?apiVersion=2022-11-28#repository-permissions-for-pull-requests). |
diff --git a/data/reusables/copilot/differences-cfi-cfb-table.md b/data/reusables/copilot/differences-cfi-cfb-table.md
index 25a20fa89ce0..2711e7151c74 100644
--- a/data/reusables/copilot/differences-cfi-cfb-table.md
+++ b/data/reusables/copilot/differences-cfi-cfb-table.md
@@ -36,7 +36,6 @@ Each plan comes with an allowance of {% data variables.product.prodname_ai_credi
| {% data variables.copilot.copilot_mobile_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_chat_dotcom_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_chat_short %} in {% data variables.product.prodname_windows_terminal %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |{% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
-| Increased {% data variables.product.prodname_github_models %} rate limits[^3] | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_chat_short %} skills in IDEs[^5] | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
{% endrowheaders %}
@@ -89,6 +88,5 @@ Each plan comes with an allowance of {% data variables.product.prodname_ai_credi
[^1]: Includes base credits and flex allotment. See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-individuals#how-do-ai-credits-work).
[^2]: {% data variables.copilot.copilot_chat_short %} in IDEs is available in {% data variables.product.prodname_vscode %}, {% data variables.product.prodname_vs %}, JetBrains IDEs, Eclipse, and Xcode.
[^3]: Response times may vary during periods of high usage.
-[^4]: For details about the increased rate limits, see [AUTOTITLE](/github-models/use-github-models/prototyping-with-ai-models).
[^5]: {% data variables.copilot.copilot_chat_short %} skills in IDEs is available in {% data variables.product.prodname_vscode %} and {% data variables.product.prodname_vs %}.
[^6]: Inline suggestions in IDEs is available in {% data variables.product.prodname_vscode %}, {% data variables.product.prodname_vs %}, JetBrains IDEs, Azure Data Studio, Xcode, Vim/Neovim, and Eclipse.
diff --git a/data/reusables/copilot/model-autoenablement-excluded-models.md b/data/reusables/copilot/model-autoenablement-excluded-models.md
index a0d0ec41e22b..f56f6afabb40 100644
--- a/data/reusables/copilot/model-autoenablement-excluded-models.md
+++ b/data/reusables/copilot/model-autoenablement-excluded-models.md
@@ -5,7 +5,7 @@ New and existing unconfigured models will follow the default set in the policy.
* At the enterprise level, models that have not been added to the models list on the models configuration page.
-* At the organization level, models that have been made "optional" by an enterprise administrator, and that an organization owner has not explicitly enabled or disabled.
+* At the organization level, models that have been made "optional" by an enterprise administrator, and that an organization owner has not explicitly enabled or disabled. (**Does not apply** if you are opted in to the enterprise teams model access preview.)
When a new model is released, it is unconfigured by default.
diff --git a/data/reusables/copilot/setup-next-steps.md b/data/reusables/copilot/setup-next-steps.md
index 838159cd109b..a75b9b0fa115 100644
--- a/data/reusables/copilot/setup-next-steps.md
+++ b/data/reusables/copilot/setup-next-steps.md
@@ -1,5 +1,5 @@
* **Set a governance posture that supports adoption**. Avoid over-restricting {% data variables.product.prodname_copilot_short %} by delegating administration, enabling vetted features promptly, and aligning spend controls with your goals. See [AUTOTITLE](/copilot/tutorials/roll-out-at-scale/govern-at-scale/govern-for-adoption).
* **Explore self-service license management options**. Many successful rollouts use a self-service model where developers can claim a license without approval. See [AUTOTITLE](/copilot/tutorials/roll-out-at-scale/assign-licenses/set-up-self-serve-licenses).
* **Learn how to plan and implement an effective enablement process to drive {% data variables.product.prodname_copilot_short %} adoption**. See [AUTOTITLE](/copilot/tutorials/roll-out-at-scale/enable-developers/drive-adoption).
-* **Enhance the development experience by enabling and training developers on the latest features**. For example, share context with {% data variables.copilot.copilot_spaces %}, enable {% data variables.copilot.copilot_code-review_short %} on pull requests, and allow developers to experiment with prompts using {% data variables.product.prodname_github_models %}. For an example showing how these features fit together, see [AUTOTITLE](/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents).
+* **Enhance the development experience by enabling and training developers on the latest features**. For example, share context with {% data variables.copilot.copilot_spaces %} and enable {% data variables.copilot.copilot_code-review_short %} on pull requests. For an example showing how these features fit together, see [AUTOTITLE](/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents).
* **Add {% data variables.copilot.copilot_cloud_agent %} as a team member for asynchronous issue work**. See [AUTOTITLE](/copilot/tutorials/cloud-agent/pilot-cloud-agent).
diff --git a/data/reusables/enterprise/enterprise-teams-can.md b/data/reusables/enterprise/enterprise-teams-can.md
index b21cff43764b..51ec07508a51 100644
--- a/data/reusables/enterprise/enterprise-teams-can.md
+++ b/data/reusables/enterprise/enterprise-teams-can.md
@@ -2,6 +2,7 @@ Enterprise teams can:
{%- ifversion not ghes %}
* Receive **{% data variables.copilot.copilot_business_short %} licenses** directly from the enterprise.
+* Be granted access to specific {% data variables.product.prodname_copilot_short %} models (opt-in preview).
{%- endif %}
* Be assigned **predefined and custom enterprise roles**, giving members access to enterprise settings.
* Be **added to organizations**, where organization administrators can grant the team additional access and permissions.
diff --git a/data/tables/copilot/models-and-pricing.yml b/data/tables/copilot/models-and-pricing.yml
index 207a2b844414..b33e21aefd91 100644
--- a/data/tables/copilot/models-and-pricing.yml
+++ b/data/tables/copilot/models-and-pricing.yml
@@ -104,9 +104,9 @@
category: Lightweight
threshold: '≤ 200K'
tier: Default
- input: $1.00
- cached_input: $0.10
- output: $6.00
+ input: $0.20
+ cached_input: $0.02
+ output: $1.20
- model: GPT-5.6 Luna
provider: openai
@@ -114,9 +114,9 @@
category: Lightweight
threshold: '> 200K'
tier: 'Long context'
- input: $2.00
- cached_input: $0.20
- output: $9.00
+ input: $0.40
+ cached_input: $0.04
+ output: $1.80
- model: GPT-5.6 Sol
provider: openai
@@ -144,9 +144,9 @@
category: Versatile
threshold: '≤ 272K'
tier: Default
- input: $2.50
- cached_input: $0.25
- output: $15.00
+ input: $2.00
+ cached_input: $0.20
+ output: $12.00
- model: GPT-5.6 Terra
provider: openai
@@ -154,9 +154,9 @@
category: Versatile
threshold: '> 272K'
tier: 'Long context'
- input: $5.00
- cached_input: $0.50
- output: $22.50
+ input: $4.00
+ cached_input: $0.40
+ output: $18.00
# Anthropic
- model: Claude Haiku 4.5
diff --git a/src/ai-tools/README.md b/src/ai-tools/README.md
index 98235fbc3719..11b6e06fed16 100644
--- a/src/ai-tools/README.md
+++ b/src/ai-tools/README.md
@@ -99,7 +99,6 @@ npm run ai-tools -- --files content/path/to/file.md --refine versioning --write
- Content files in `content/` - Target of refinements
### Internal documentation
-- [GitHub Models API docs](https://docs.github.com/en/rest/models/inference)
- Copilot Spaces for prompt management
### Ownership
diff --git a/src/rest/README.md b/src/rest/README.md
index 8dd922461f54..9000b524abc2 100644
--- a/src/rest/README.md
+++ b/src/rest/README.md
@@ -36,7 +36,7 @@ To run the REST pipeline locally:
1. Clone the [`github/rest-api-description`](https://github.com/github/rest-api-description) repository inside your local `docs-internal` repository.
1. Set a `GITHUB_TOKEN` in your `.env` with (classic) `repo` scopes & enable SSO for the github org.
-1. Run `npm run sync-rest -- -s rest-api-description models-gateway -o rest`. Note, by default `-o rest` is specified, so you can omit it.
+1. Run `npm run sync-rest -- -s rest-api-description -o rest`. Note, by default `-o rest` is specified, so you can omit it.
## About this directory
diff --git a/src/rest/components/RestCodeSamples.tsx b/src/rest/components/RestCodeSamples.tsx
index de4f8bba123d..257292f23017 100644
--- a/src/rest/components/RestCodeSamples.tsx
+++ b/src/rest/components/RestCodeSamples.tsx
@@ -61,13 +61,9 @@ export function RestCodeSamples({ operation, slug, heading }: Props) {
// Menu options for the language selector
const languageSelectOptions: CodeSampleKeys[] = [CodeSampleKeys.curl]
- // Management Console, GHES Manage API, and GitHub Models
- // operations are not supported by Octokit
- if (
- operation.category !== 'models' &&
- operation.subcategory !== 'management-console' &&
- operation.subcategory !== 'manage-ghes'
- ) {
+ // Management Console and GHES Manage API operations are not supported
+ // by Octokit
+ if (operation.subcategory !== 'management-console' && operation.subcategory !== 'manage-ghes') {
languageSelectOptions.push(CodeSampleKeys.javascript)
// Not all examples support the GH CLI language option. If any of
diff --git a/src/rest/data/fpt-2022-11-28/models.json b/src/rest/data/fpt-2022-11-28/models.json
deleted file mode 100644
index 2080e022058b..000000000000
--- a/src/rest/data/fpt-2022-11-28/models.json
+++ /dev/null
@@ -1,1156 +0,0 @@
-{
- "catalog": [
- {
- "serverUrl": "https://models.github.ai",
- "verb": "get",
- "requestPath": "/catalog/models",
- "title": "List all models",
- "category": "models",
- "subcategory": "catalog",
- "parameters": [],
- "bodyParameters": [],
- "descriptionHTML": "Get a list of models available for use, including details like supported input/output modalities,\npublisher, and rate limits.
",
- "codeExamples": [
- {
- "request": {
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json"
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": [
- {
- "id": "openai/gpt-4.1",
- "name": "OpenAI GPT-4.1",
- "publisher": "OpenAI",
- "registry": "azure-openai",
- "summary": "gpt-4.1 outperforms gpt-4o across the board, with major gains in coding, instruction following, and long-context understanding",
- "html_url": "https://github.com/marketplace/models/azure-openai/gpt-4-1",
- "version": "2025-04-14",
- "capabilities": [
- "streaming",
- "tool-calling"
- ],
- "limits": {
- "max_input_tokens": 1048576,
- "max_output_tokens": 32768
- },
- "rate_limit_tier": "high",
- "supported_input_modalities": [
- "text",
- "image",
- "audio"
- ],
- "supported_output_modalities": [
- "text"
- ],
- "tags": [
- "multipurpose",
- "multilingual",
- "multimodal"
- ]
- }
- ],
- "schema": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "description": "The unique identifier for the model"
- },
- "name": {
- "type": "string",
- "description": "The name of the model"
- },
- "registry": {
- "type": "string",
- "description": "The registry where the model is listed"
- },
- "publisher": {
- "type": "string",
- "description": "The publisher of the model"
- },
- "summary": {
- "type": "string",
- "description": "A brief summary of the model's capabilities"
- },
- "rate_limit_tier": {
- "type": "string",
- "description": "The rate limit tier for the model"
- },
- "html_url": {
- "type": "string",
- "description": "The URL to the model's detail page"
- },
- "version": {
- "type": "string",
- "description": "The version of the model"
- },
- "capabilities": {
- "type": "array",
- "description": "A list of capabilities supported by the model",
- "items": {
- "type": "string"
- }
- },
- "limits": {
- "type": "object",
- "description": "The limits for the model, including input/output token limits",
- "properties": {
- "max_input_tokens": {
- "type": "integer",
- "description": "The maximum number of input tokens allowed"
- },
- "max_output_tokens": {
- "type": "integer",
- "description": "The maximum number of output tokens allowed"
- }
- }
- },
- "tags": {
- "type": "array",
- "description": "A list of tags associated with the model",
- "items": {
- "type": "string"
- }
- },
- "supported_input_modalities": {
- "type": "array",
- "description": "A list of input modalities supported by the model",
- "items": {
- "type": "string",
- "description": "An input modality supported by the model"
- }
- },
- "supported_output_modalities": {
- "type": "array",
- "description": "A list of output modalities supported by the model",
- "items": {
- "type": "string",
- "description": "An output modality supported by the model"
- }
- }
- }
- }
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- }
- ],
- "embeddings": [
- {
- "serverUrl": "https://models.github.ai",
- "verb": "post",
- "requestPath": "/orgs/{org}/inference/embeddings",
- "title": "Run an embedding request attributed to an organization",
- "category": "models",
- "subcategory": "embeddings",
- "parameters": [
- {
- "in": "query",
- "required": false,
- "name": "api-version",
- "description": "The API version to use. Optional, but required for some features.
",
- "schema": {
- "type": "string"
- }
- },
- {
- "in": "path",
- "name": "org",
- "required": true,
- "description": "The organization login associated with the organization to which the request is to be attributed.
",
- "schema": {
- "type": "string"
- }
- }
- ],
- "bodyParameters": [
- {
- "type": "string",
- "name": "model",
- "description": "ID of the specific model to use for the request. The model ID should be in the format of {publisher}/{model_name} where \"openai/text-embedding-3-small\" is an example of a model ID. You can find supported models in the catalog/models endpoint.
",
- "isRequired": true
- },
- {
- "type": "string or array",
- "name": "input",
- "description": "Input text to embed, encoded as a string or array of strings. To embed multiple inputs in a single request, pass an array of strings. Each input must not exceed the max input tokens for the model, cannot be an empty string, and any array must be 2048 dimensions or less.
",
- "isRequired": true
- },
- {
- "type": "string",
- "name": "encoding_format",
- "description": "The format to return the embeddings in. Can be either float or base64.
",
- "enum": [
- "float",
- "base64"
- ],
- "default": "float"
- },
- {
- "type": "integer",
- "name": "dimensions",
- "description": "The number of dimensions the resulting output embeddings should have. Only supported in text-embedding-3 and later models.
"
- },
- {
- "type": "string",
- "name": "user",
- "description": "A unique identifier representing your end-user, which can help us to monitor and detect abuse.
"
- }
- ],
- "descriptionHTML": "This endpoint allows you to run an embedding request attributed to a specific organization. You must be a member of the organization and have enabled models to use this endpoint.\nThe token used to authenticate must have the models: read permission if using a fine-grained PAT or GitHub App minted token.\nThe request body should contain the model ID and the input text(s) for the embedding request. The response will include the generated embeddings.
",
- "codeExamples": [
- {
- "request": {
- "contentType": "application/json",
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json",
- "bodyParameters": {
- "model": "openai/text-embedding-3-small",
- "input": [
- "The food was delicious and the waiter was very friendly.",
- "I had a great time at the restaurant."
- ]
- },
- "parameters": {
- "org": "ORG"
- }
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": {
- "object": "list",
- "data": [
- {
- "object": "embedding",
- "index": 0,
- "embedding": [
- 0.0023064255,
- -0.009327292,
- -0.0028842222
- ]
- }
- ],
- "model": "openai/text-embedding-3-small",
- "usage": {
- "prompt_tokens": 8,
- "total_tokens": 8
- }
- },
- "schema": {
- "title": "Embedding Response",
- "description": "The response for an embedding request.",
- "type": "object",
- "properties": {
- "object": {
- "description": "The object type, which is always \"list\" for embedding responses.",
- "type": "string",
- "enum": [
- "list"
- ]
- },
- "data": {
- "description": "A list of embedding objects.",
- "type": "array",
- "items": {
- "title": "Embedding Object",
- "description": "An embedding vector returned by the model.",
- "type": "object",
- "properties": {
- "object": {
- "description": "The object type, which is always \"embedding\".",
- "type": "string",
- "enum": [
- "embedding"
- ]
- },
- "index": {
- "description": "The index of the embedding in the list of embeddings.",
- "type": "integer"
- },
- "embedding": {
- "description": "The embedding vector, which is a list of floats.",
- "type": "array",
- "items": {
- "type": "number"
- }
- }
- },
- "required": [
- "object",
- "index",
- "embedding"
- ]
- }
- },
- "model": {
- "description": "The model used for the embedding.",
- "type": "string"
- },
- "usage": {
- "description": "Usage statistics for the request.",
- "type": "object",
- "properties": {
- "prompt_tokens": {
- "description": "The number of tokens in the input.",
- "type": "integer"
- },
- "total_tokens": {
- "description": "The total number of tokens processed.",
- "type": "integer"
- }
- },
- "required": [
- "prompt_tokens",
- "total_tokens"
- ]
- }
- },
- "required": [
- "object",
- "data",
- "model",
- "usage"
- ]
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- },
- {
- "serverUrl": "https://models.github.ai",
- "verb": "post",
- "requestPath": "/inference/embeddings",
- "title": "Run an embedding request",
- "category": "models",
- "subcategory": "embeddings",
- "parameters": [
- {
- "in": "query",
- "required": false,
- "name": "api-version",
- "description": "The API version to use. Optional, but required for some features.
",
- "schema": {
- "type": "string"
- }
- }
- ],
- "bodyParameters": [
- {
- "type": "string",
- "name": "model",
- "description": "ID of the specific model to use for the request. The model ID should be in the format of {publisher}/{model_name} where \"openai/text-embedding-3-small\" is an example of a model ID. You can find supported models in the catalog/models endpoint.
",
- "isRequired": true
- },
- {
- "type": "string or array",
- "name": "input",
- "description": "Input text to embed, encoded as a string or array of strings. To embed multiple inputs in a single request, pass an array of strings. Each input must not exceed the max input tokens for the model, cannot be an empty string, and any array must be 2048 dimensions or less.
",
- "isRequired": true
- },
- {
- "type": "string",
- "name": "encoding_format",
- "description": "The format to return the embeddings in. Can be either float or base64.
",
- "enum": [
- "float",
- "base64"
- ],
- "default": "float"
- },
- {
- "type": "integer",
- "name": "dimensions",
- "description": "The number of dimensions the resulting output embeddings should have. Only supported in text-embedding-3 and later models.
"
- },
- {
- "type": "string",
- "name": "user",
- "description": "A unique identifier representing your end-user, which can help us to monitor and detect abuse.
"
- }
- ],
- "descriptionHTML": "This endpoint allows you to run an embedding request. The token used to authenticate must have the models: read permission if using a fine-grained PAT or GitHub App minted token.\nThe request body should contain the model ID and the input text(s) for the embedding request. The response will include the generated embeddings.
",
- "codeExamples": [
- {
- "request": {
- "contentType": "application/json",
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json",
- "bodyParameters": {
- "model": "openai/text-embedding-3-small",
- "input": [
- "The food was delicious and the waiter was very friendly.",
- "I had a great time at the restaurant."
- ]
- }
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": {
- "object": "list",
- "data": [
- {
- "object": "embedding",
- "index": 0,
- "embedding": [
- 0.0023064255,
- -0.009327292,
- -0.0028842222
- ]
- }
- ],
- "model": "openai/text-embedding-3-small",
- "usage": {
- "prompt_tokens": 8,
- "total_tokens": 8
- }
- },
- "schema": {
- "title": "Embedding Response",
- "description": "The response for an embedding request.",
- "type": "object",
- "properties": {
- "object": {
- "description": "The object type, which is always \"list\" for embedding responses.",
- "type": "string",
- "enum": [
- "list"
- ]
- },
- "data": {
- "description": "A list of embedding objects.",
- "type": "array",
- "items": {
- "title": "Embedding Object",
- "description": "An embedding vector returned by the model.",
- "type": "object",
- "properties": {
- "object": {
- "description": "The object type, which is always \"embedding\".",
- "type": "string",
- "enum": [
- "embedding"
- ]
- },
- "index": {
- "description": "The index of the embedding in the list of embeddings.",
- "type": "integer"
- },
- "embedding": {
- "description": "The embedding vector, which is a list of floats.",
- "type": "array",
- "items": {
- "type": "number"
- }
- }
- },
- "required": [
- "object",
- "index",
- "embedding"
- ]
- }
- },
- "model": {
- "description": "The model used for the embedding.",
- "type": "string"
- },
- "usage": {
- "description": "Usage statistics for the request.",
- "type": "object",
- "properties": {
- "prompt_tokens": {
- "description": "The number of tokens in the input.",
- "type": "integer"
- },
- "total_tokens": {
- "description": "The total number of tokens processed.",
- "type": "integer"
- }
- },
- "required": [
- "prompt_tokens",
- "total_tokens"
- ]
- }
- },
- "required": [
- "object",
- "data",
- "model",
- "usage"
- ]
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- }
- ],
- "inference": [
- {
- "serverUrl": "https://models.github.ai",
- "verb": "post",
- "requestPath": "/orgs/{org}/inference/chat/completions",
- "title": "Run an inference request attributed to an organization",
- "category": "models",
- "subcategory": "inference",
- "parameters": [
- {
- "in": "query",
- "required": false,
- "name": "api-version",
- "description": "The API version to use. Optional, but required for some features.
",
- "schema": {
- "type": "string"
- }
- },
- {
- "in": "path",
- "name": "org",
- "required": true,
- "description": "The organization login associated with the organization to which the request is to be attributed.
",
- "schema": {
- "type": "string"
- }
- }
- ],
- "bodyParameters": [
- {
- "type": "string",
- "name": "model",
- "description": "ID of the specific model to use for the request. The model ID should be in the format of {publisher}/{model_name} where \"openai/gpt-4.1\" is an example of a model ID. You can find supported models in the catalog/models endpoint.
",
- "isRequired": true
- },
- {
- "type": "array of objects",
- "name": "messages",
- "description": "The collection of context messages associated with this chat completion request. Typical usage begins with a chat message for the System role that provides instructions for the behavior of the assistant, followed by alternating messages between the User and Assistant roles.
",
- "isRequired": true,
- "childParamsGroups": [
- {
- "type": "string",
- "name": "role",
- "description": "The chat role associated with this message
",
- "isRequired": true,
- "enum": [
- "assistant",
- "developer",
- "system",
- "user"
- ]
- },
- {
- "type": "string",
- "name": "content",
- "description": "The content of the message
",
- "isRequired": true
- }
- ]
- },
- {
- "type": "number",
- "name": "frequency_penalty",
- "description": "A value that influences the probability of generated tokens appearing based on their cumulative frequency in generated text. Positive values will make tokens less likely to appear as their frequency increases and decrease the likelihood of the model repeating the same statements verbatim. Supported range is [-2, 2].
"
- },
- {
- "type": "integer",
- "name": "max_tokens",
- "description": "The maximum number of tokens to generate in the completion. The token count of your prompt plus max_tokens cannot exceed the model's context length. For example, if your prompt is 100 tokens and you set max_tokens to 50, the API will return a completion with a maximum of 50 tokens.
"
- },
- {
- "type": "array of strings",
- "name": "modalities",
- "description": "The modalities that the model is allowed to use for the chat completions response. The default modality is text. Indicating an unsupported modality combination results in a 422 error.\nSupported values are: text, audio
"
- },
- {
- "type": "number",
- "name": "presence_penalty",
- "description": "A value that influences the probability of generated tokens appearing based on their existing presence in generated text. Positive values will make tokens less likely to appear when they already exist and increase the model's likelihood to output new tokens. Supported range is [-2, 2].
"
- },
- {
- "type": "object",
- "name": "response_format",
- "description": "The desired format for the response.
",
- "childParamsGroups": [
- {
- "type": "object",
- "name": "Object",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "type",
- "description": "",
- "enum": [
- "text",
- "json_object"
- ]
- }
- ]
- },
- {
- "type": "object",
- "name": "Schema for structured JSON response",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "type",
- "description": "The type of the response.
",
- "isRequired": true,
- "enum": [
- "json_schema"
- ]
- },
- {
- "type": "object",
- "name": "json_schema",
- "description": "The JSON schema for the response.
",
- "isRequired": true
- }
- ]
- }
- ],
- "oneOfObject": true
- },
- {
- "type": "integer",
- "name": "seed",
- "description": "If specified, the system will make a best effort to sample deterministically such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed.
"
- },
- {
- "type": "boolean",
- "name": "stream",
- "description": "A value indicating whether chat completions should be streamed for this request.
",
- "default": false
- },
- {
- "type": "object",
- "name": "stream_options",
- "description": "Whether to include usage information in the response. Requires stream to be set to true.
",
- "childParamsGroups": [
- {
- "type": "boolean",
- "name": "include_usage",
- "description": "Whether to include usage information in the response.
",
- "default": false
- }
- ]
- },
- {
- "type": "array of strings",
- "name": "stop",
- "description": "A collection of textual sequences that will end completion generation.
"
- },
- {
- "type": "number",
- "name": "temperature",
- "description": "The sampling temperature to use that controls the apparent creativity of generated completions. Higher values will make output more random while lower values will make results more focused and deterministic. It is not recommended to modify temperature and top_p for the same completion request as the interaction of these two settings is difficult to predict. Supported range is [0, 1]. Decimal values are supported.
"
- },
- {
- "type": "string",
- "name": "tool_choice",
- "description": "If specified, the model will configure which of the provided tools it can use for the chat completions response.
",
- "enum": [
- "auto",
- "required",
- "none"
- ]
- },
- {
- "type": "array of objects",
- "name": "tools",
- "description": "A list of tools the model may request to call. Currently, only functions are supported as a tool. The model may respond with a function call request and provide the input arguments in JSON format for that function.
",
- "childParamsGroups": [
- {
- "type": "object",
- "name": "function",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "name",
- "description": "The name of the function to be called.
"
- },
- {
- "type": "string",
- "name": "description",
- "description": "A description of what the function does. The model will use this description when selecting the function and interpreting its parameters.
"
- },
- {
- "type": "",
- "name": "parameters",
- "description": "The parameters the function accepts, described as a JSON Schema object.
"
- }
- ]
- },
- {
- "type": "string",
- "name": "type",
- "description": "",
- "enum": [
- "function"
- ]
- }
- ]
- },
- {
- "type": "number",
- "name": "top_p",
- "description": "An alternative to sampling with temperature called nucleus sampling. This value causes the model to consider the results of tokens with the provided probability mass. As an example, a value of 0.15 will cause only the tokens comprising the top 15% of probability mass to be considered. It is not recommended to modify temperature and top_p for the same request as the interaction of these two settings is difficult to predict. Supported range is [0, 1]. Decimal values are supported.
"
- }
- ],
- "descriptionHTML": "This endpoint allows you to run an inference request attributed to a specific organization. You must be a member of the organization and have enabled models to use this endpoint.\nThe token used to authenticate must have the models: read permission if using a fine-grained PAT or GitHub App minted token.\nThe request body should contain the model ID and the messages for the chat completion request. The response will include either a non-streaming or streaming response based on the request parameters.
",
- "codeExamples": [
- {
- "request": {
- "contentType": "application/json",
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json",
- "bodyParameters": {
- "model": "openai/gpt-4.1",
- "messages": [
- {
- "role": "user",
- "content": "What is the capital of France?"
- }
- ]
- },
- "parameters": {
- "org": "ORG"
- }
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": {
- "choices": [
- {
- "message": {
- "content": "The capital of France is Paris.",
- "role": "assistant"
- }
- }
- ]
- },
- "schema": {
- "type": "object",
- "oneOf": [
- {
- "title": "Non Streaming Response",
- "description": "A non-streaming response for the inference request.",
- "type": "object",
- "properties": {
- "choices": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "message": {
- "description": "The message associated with the completion.",
- "type": "object",
- "properties": {
- "content": {
- "description": "The content of the message.",
- "type": "string"
- },
- "role": {
- "description": "The role of the message.",
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- },
- {
- "title": "Streaming Response",
- "description": "A streaming response for the inference request",
- "type": "object",
- "properties": {
- "data": {
- "description": "Some details about the response.",
- "type": "object",
- "properties": {
- "choices": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "delta": {
- "description": "Container for the content of the streamed response.",
- "type": "object",
- "properties": {
- "content": {
- "description": "The content of the streamed response.",
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- ]
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- },
- {
- "serverUrl": "https://models.github.ai",
- "verb": "post",
- "requestPath": "/inference/chat/completions",
- "title": "Run an inference request",
- "category": "models",
- "subcategory": "inference",
- "parameters": [
- {
- "in": "query",
- "required": false,
- "name": "api-version",
- "description": "The API version to use. Optional, but required for some features.
",
- "schema": {
- "type": "string"
- }
- }
- ],
- "bodyParameters": [
- {
- "type": "string",
- "name": "model",
- "description": "ID of the specific model to use for the request. The model ID should be in the format of {publisher}/{model_name} where \"openai/gpt-4.1\" is an example of a model ID. You can find supported models in the catalog/models endpoint.
",
- "isRequired": true
- },
- {
- "type": "array of objects",
- "name": "messages",
- "description": "The collection of context messages associated with this chat completion request. Typical usage begins with a chat message for the System role that provides instructions for the behavior of the assistant, followed by alternating messages between the User and Assistant roles.
",
- "isRequired": true,
- "childParamsGroups": [
- {
- "type": "string",
- "name": "role",
- "description": "The chat role associated with this message
",
- "isRequired": true,
- "enum": [
- "assistant",
- "developer",
- "system",
- "user"
- ]
- },
- {
- "type": "string",
- "name": "content",
- "description": "The content of the message
",
- "isRequired": true
- }
- ]
- },
- {
- "type": "number",
- "name": "frequency_penalty",
- "description": "A value that influences the probability of generated tokens appearing based on their cumulative frequency in generated text. Positive values will make tokens less likely to appear as their frequency increases and decrease the likelihood of the model repeating the same statements verbatim. Supported range is [-2, 2].
"
- },
- {
- "type": "integer",
- "name": "max_tokens",
- "description": "The maximum number of tokens to generate in the completion. The token count of your prompt plus max_tokens cannot exceed the model's context length. For example, if your prompt is 100 tokens and you set max_tokens to 50, the API will return a completion with a maximum of 50 tokens.
"
- },
- {
- "type": "array of strings",
- "name": "modalities",
- "description": "The modalities that the model is allowed to use for the chat completions response. The default modality is text. Indicating an unsupported modality combination results in a 422 error.\nSupported values are: text, audio
"
- },
- {
- "type": "number",
- "name": "presence_penalty",
- "description": "A value that influences the probability of generated tokens appearing based on their existing presence in generated text. Positive values will make tokens less likely to appear when they already exist and increase the model's likelihood to output new tokens. Supported range is [-2, 2].
"
- },
- {
- "type": "object",
- "name": "response_format",
- "description": "The desired format for the response.
",
- "childParamsGroups": [
- {
- "type": "object",
- "name": "Object",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "type",
- "description": "",
- "enum": [
- "text",
- "json_object"
- ]
- }
- ]
- },
- {
- "type": "object",
- "name": "Schema for structured JSON response",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "type",
- "description": "The type of the response.
",
- "isRequired": true,
- "enum": [
- "json_schema"
- ]
- },
- {
- "type": "object",
- "name": "json_schema",
- "description": "The JSON schema for the response.
",
- "isRequired": true
- }
- ]
- }
- ],
- "oneOfObject": true
- },
- {
- "type": "integer",
- "name": "seed",
- "description": "If specified, the system will make a best effort to sample deterministically such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed.
"
- },
- {
- "type": "boolean",
- "name": "stream",
- "description": "A value indicating whether chat completions should be streamed for this request.
",
- "default": false
- },
- {
- "type": "object",
- "name": "stream_options",
- "description": "Whether to include usage information in the response. Requires stream to be set to true.
",
- "childParamsGroups": [
- {
- "type": "boolean",
- "name": "include_usage",
- "description": "Whether to include usage information in the response.
",
- "default": false
- }
- ]
- },
- {
- "type": "array of strings",
- "name": "stop",
- "description": "A collection of textual sequences that will end completion generation.
"
- },
- {
- "type": "number",
- "name": "temperature",
- "description": "The sampling temperature to use that controls the apparent creativity of generated completions. Higher values will make output more random while lower values will make results more focused and deterministic. It is not recommended to modify temperature and top_p for the same completion request as the interaction of these two settings is difficult to predict. Supported range is [0, 1]. Decimal values are supported.
"
- },
- {
- "type": "string",
- "name": "tool_choice",
- "description": "If specified, the model will configure which of the provided tools it can use for the chat completions response.
",
- "enum": [
- "auto",
- "required",
- "none"
- ]
- },
- {
- "type": "array of objects",
- "name": "tools",
- "description": "A list of tools the model may request to call. Currently, only functions are supported as a tool. The model may respond with a function call request and provide the input arguments in JSON format for that function.
",
- "childParamsGroups": [
- {
- "type": "object",
- "name": "function",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "name",
- "description": "The name of the function to be called.
"
- },
- {
- "type": "string",
- "name": "description",
- "description": "A description of what the function does. The model will use this description when selecting the function and interpreting its parameters.
"
- },
- {
- "type": "",
- "name": "parameters",
- "description": "The parameters the function accepts, described as a JSON Schema object.
"
- }
- ]
- },
- {
- "type": "string",
- "name": "type",
- "description": "",
- "enum": [
- "function"
- ]
- }
- ]
- },
- {
- "type": "number",
- "name": "top_p",
- "description": "An alternative to sampling with temperature called nucleus sampling. This value causes the model to consider the results of tokens with the provided probability mass. As an example, a value of 0.15 will cause only the tokens comprising the top 15% of probability mass to be considered. It is not recommended to modify temperature and top_p for the same request as the interaction of these two settings is difficult to predict. Supported range is [0, 1]. Decimal values are supported.
"
- }
- ],
- "descriptionHTML": "This endpoint allows you to run an inference request. The token used to authenticate must have the models: read permission if using a fine-grained PAT or GitHub App minted token.\nThe request body should contain the model ID and\nthe messages for the chat completion request. The response will include either a non-streaming or streaming response based on the request parameters.
",
- "codeExamples": [
- {
- "request": {
- "contentType": "application/json",
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json",
- "bodyParameters": {
- "model": "openai/gpt-4.1",
- "messages": [
- {
- "role": "user",
- "content": "What is the capital of France?"
- }
- ]
- }
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": {
- "choices": [
- {
- "message": {
- "content": "The capital of France is Paris.",
- "role": "assistant"
- }
- }
- ]
- },
- "schema": {
- "type": "object",
- "oneOf": [
- {
- "title": "Non Streaming Response",
- "description": "A non-streaming response for the inference request.",
- "type": "object",
- "properties": {
- "choices": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "message": {
- "description": "The message associated with the completion.",
- "type": "object",
- "properties": {
- "content": {
- "description": "The content of the message.",
- "type": "string"
- },
- "role": {
- "description": "The role of the message.",
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- },
- {
- "title": "Streaming Response",
- "description": "A streaming response for the inference request",
- "type": "object",
- "properties": {
- "data": {
- "description": "Some details about the response.",
- "type": "object",
- "properties": {
- "choices": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "delta": {
- "description": "Container for the content of the streamed response.",
- "type": "object",
- "properties": {
- "content": {
- "description": "The content of the streamed response.",
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- ]
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- }
- ]
-}
\ No newline at end of file
diff --git a/src/rest/data/fpt-2026-03-10/models.json b/src/rest/data/fpt-2026-03-10/models.json
deleted file mode 100644
index 2080e022058b..000000000000
--- a/src/rest/data/fpt-2026-03-10/models.json
+++ /dev/null
@@ -1,1156 +0,0 @@
-{
- "catalog": [
- {
- "serverUrl": "https://models.github.ai",
- "verb": "get",
- "requestPath": "/catalog/models",
- "title": "List all models",
- "category": "models",
- "subcategory": "catalog",
- "parameters": [],
- "bodyParameters": [],
- "descriptionHTML": "Get a list of models available for use, including details like supported input/output modalities,\npublisher, and rate limits.
",
- "codeExamples": [
- {
- "request": {
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json"
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": [
- {
- "id": "openai/gpt-4.1",
- "name": "OpenAI GPT-4.1",
- "publisher": "OpenAI",
- "registry": "azure-openai",
- "summary": "gpt-4.1 outperforms gpt-4o across the board, with major gains in coding, instruction following, and long-context understanding",
- "html_url": "https://github.com/marketplace/models/azure-openai/gpt-4-1",
- "version": "2025-04-14",
- "capabilities": [
- "streaming",
- "tool-calling"
- ],
- "limits": {
- "max_input_tokens": 1048576,
- "max_output_tokens": 32768
- },
- "rate_limit_tier": "high",
- "supported_input_modalities": [
- "text",
- "image",
- "audio"
- ],
- "supported_output_modalities": [
- "text"
- ],
- "tags": [
- "multipurpose",
- "multilingual",
- "multimodal"
- ]
- }
- ],
- "schema": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "description": "The unique identifier for the model"
- },
- "name": {
- "type": "string",
- "description": "The name of the model"
- },
- "registry": {
- "type": "string",
- "description": "The registry where the model is listed"
- },
- "publisher": {
- "type": "string",
- "description": "The publisher of the model"
- },
- "summary": {
- "type": "string",
- "description": "A brief summary of the model's capabilities"
- },
- "rate_limit_tier": {
- "type": "string",
- "description": "The rate limit tier for the model"
- },
- "html_url": {
- "type": "string",
- "description": "The URL to the model's detail page"
- },
- "version": {
- "type": "string",
- "description": "The version of the model"
- },
- "capabilities": {
- "type": "array",
- "description": "A list of capabilities supported by the model",
- "items": {
- "type": "string"
- }
- },
- "limits": {
- "type": "object",
- "description": "The limits for the model, including input/output token limits",
- "properties": {
- "max_input_tokens": {
- "type": "integer",
- "description": "The maximum number of input tokens allowed"
- },
- "max_output_tokens": {
- "type": "integer",
- "description": "The maximum number of output tokens allowed"
- }
- }
- },
- "tags": {
- "type": "array",
- "description": "A list of tags associated with the model",
- "items": {
- "type": "string"
- }
- },
- "supported_input_modalities": {
- "type": "array",
- "description": "A list of input modalities supported by the model",
- "items": {
- "type": "string",
- "description": "An input modality supported by the model"
- }
- },
- "supported_output_modalities": {
- "type": "array",
- "description": "A list of output modalities supported by the model",
- "items": {
- "type": "string",
- "description": "An output modality supported by the model"
- }
- }
- }
- }
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- }
- ],
- "embeddings": [
- {
- "serverUrl": "https://models.github.ai",
- "verb": "post",
- "requestPath": "/orgs/{org}/inference/embeddings",
- "title": "Run an embedding request attributed to an organization",
- "category": "models",
- "subcategory": "embeddings",
- "parameters": [
- {
- "in": "query",
- "required": false,
- "name": "api-version",
- "description": "The API version to use. Optional, but required for some features.
",
- "schema": {
- "type": "string"
- }
- },
- {
- "in": "path",
- "name": "org",
- "required": true,
- "description": "The organization login associated with the organization to which the request is to be attributed.
",
- "schema": {
- "type": "string"
- }
- }
- ],
- "bodyParameters": [
- {
- "type": "string",
- "name": "model",
- "description": "ID of the specific model to use for the request. The model ID should be in the format of {publisher}/{model_name} where \"openai/text-embedding-3-small\" is an example of a model ID. You can find supported models in the catalog/models endpoint.
",
- "isRequired": true
- },
- {
- "type": "string or array",
- "name": "input",
- "description": "Input text to embed, encoded as a string or array of strings. To embed multiple inputs in a single request, pass an array of strings. Each input must not exceed the max input tokens for the model, cannot be an empty string, and any array must be 2048 dimensions or less.
",
- "isRequired": true
- },
- {
- "type": "string",
- "name": "encoding_format",
- "description": "The format to return the embeddings in. Can be either float or base64.
",
- "enum": [
- "float",
- "base64"
- ],
- "default": "float"
- },
- {
- "type": "integer",
- "name": "dimensions",
- "description": "The number of dimensions the resulting output embeddings should have. Only supported in text-embedding-3 and later models.
"
- },
- {
- "type": "string",
- "name": "user",
- "description": "A unique identifier representing your end-user, which can help us to monitor and detect abuse.
"
- }
- ],
- "descriptionHTML": "This endpoint allows you to run an embedding request attributed to a specific organization. You must be a member of the organization and have enabled models to use this endpoint.\nThe token used to authenticate must have the models: read permission if using a fine-grained PAT or GitHub App minted token.\nThe request body should contain the model ID and the input text(s) for the embedding request. The response will include the generated embeddings.
",
- "codeExamples": [
- {
- "request": {
- "contentType": "application/json",
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json",
- "bodyParameters": {
- "model": "openai/text-embedding-3-small",
- "input": [
- "The food was delicious and the waiter was very friendly.",
- "I had a great time at the restaurant."
- ]
- },
- "parameters": {
- "org": "ORG"
- }
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": {
- "object": "list",
- "data": [
- {
- "object": "embedding",
- "index": 0,
- "embedding": [
- 0.0023064255,
- -0.009327292,
- -0.0028842222
- ]
- }
- ],
- "model": "openai/text-embedding-3-small",
- "usage": {
- "prompt_tokens": 8,
- "total_tokens": 8
- }
- },
- "schema": {
- "title": "Embedding Response",
- "description": "The response for an embedding request.",
- "type": "object",
- "properties": {
- "object": {
- "description": "The object type, which is always \"list\" for embedding responses.",
- "type": "string",
- "enum": [
- "list"
- ]
- },
- "data": {
- "description": "A list of embedding objects.",
- "type": "array",
- "items": {
- "title": "Embedding Object",
- "description": "An embedding vector returned by the model.",
- "type": "object",
- "properties": {
- "object": {
- "description": "The object type, which is always \"embedding\".",
- "type": "string",
- "enum": [
- "embedding"
- ]
- },
- "index": {
- "description": "The index of the embedding in the list of embeddings.",
- "type": "integer"
- },
- "embedding": {
- "description": "The embedding vector, which is a list of floats.",
- "type": "array",
- "items": {
- "type": "number"
- }
- }
- },
- "required": [
- "object",
- "index",
- "embedding"
- ]
- }
- },
- "model": {
- "description": "The model used for the embedding.",
- "type": "string"
- },
- "usage": {
- "description": "Usage statistics for the request.",
- "type": "object",
- "properties": {
- "prompt_tokens": {
- "description": "The number of tokens in the input.",
- "type": "integer"
- },
- "total_tokens": {
- "description": "The total number of tokens processed.",
- "type": "integer"
- }
- },
- "required": [
- "prompt_tokens",
- "total_tokens"
- ]
- }
- },
- "required": [
- "object",
- "data",
- "model",
- "usage"
- ]
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- },
- {
- "serverUrl": "https://models.github.ai",
- "verb": "post",
- "requestPath": "/inference/embeddings",
- "title": "Run an embedding request",
- "category": "models",
- "subcategory": "embeddings",
- "parameters": [
- {
- "in": "query",
- "required": false,
- "name": "api-version",
- "description": "The API version to use. Optional, but required for some features.
",
- "schema": {
- "type": "string"
- }
- }
- ],
- "bodyParameters": [
- {
- "type": "string",
- "name": "model",
- "description": "ID of the specific model to use for the request. The model ID should be in the format of {publisher}/{model_name} where \"openai/text-embedding-3-small\" is an example of a model ID. You can find supported models in the catalog/models endpoint.
",
- "isRequired": true
- },
- {
- "type": "string or array",
- "name": "input",
- "description": "Input text to embed, encoded as a string or array of strings. To embed multiple inputs in a single request, pass an array of strings. Each input must not exceed the max input tokens for the model, cannot be an empty string, and any array must be 2048 dimensions or less.
",
- "isRequired": true
- },
- {
- "type": "string",
- "name": "encoding_format",
- "description": "The format to return the embeddings in. Can be either float or base64.
",
- "enum": [
- "float",
- "base64"
- ],
- "default": "float"
- },
- {
- "type": "integer",
- "name": "dimensions",
- "description": "The number of dimensions the resulting output embeddings should have. Only supported in text-embedding-3 and later models.
"
- },
- {
- "type": "string",
- "name": "user",
- "description": "A unique identifier representing your end-user, which can help us to monitor and detect abuse.
"
- }
- ],
- "descriptionHTML": "This endpoint allows you to run an embedding request. The token used to authenticate must have the models: read permission if using a fine-grained PAT or GitHub App minted token.\nThe request body should contain the model ID and the input text(s) for the embedding request. The response will include the generated embeddings.
",
- "codeExamples": [
- {
- "request": {
- "contentType": "application/json",
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json",
- "bodyParameters": {
- "model": "openai/text-embedding-3-small",
- "input": [
- "The food was delicious and the waiter was very friendly.",
- "I had a great time at the restaurant."
- ]
- }
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": {
- "object": "list",
- "data": [
- {
- "object": "embedding",
- "index": 0,
- "embedding": [
- 0.0023064255,
- -0.009327292,
- -0.0028842222
- ]
- }
- ],
- "model": "openai/text-embedding-3-small",
- "usage": {
- "prompt_tokens": 8,
- "total_tokens": 8
- }
- },
- "schema": {
- "title": "Embedding Response",
- "description": "The response for an embedding request.",
- "type": "object",
- "properties": {
- "object": {
- "description": "The object type, which is always \"list\" for embedding responses.",
- "type": "string",
- "enum": [
- "list"
- ]
- },
- "data": {
- "description": "A list of embedding objects.",
- "type": "array",
- "items": {
- "title": "Embedding Object",
- "description": "An embedding vector returned by the model.",
- "type": "object",
- "properties": {
- "object": {
- "description": "The object type, which is always \"embedding\".",
- "type": "string",
- "enum": [
- "embedding"
- ]
- },
- "index": {
- "description": "The index of the embedding in the list of embeddings.",
- "type": "integer"
- },
- "embedding": {
- "description": "The embedding vector, which is a list of floats.",
- "type": "array",
- "items": {
- "type": "number"
- }
- }
- },
- "required": [
- "object",
- "index",
- "embedding"
- ]
- }
- },
- "model": {
- "description": "The model used for the embedding.",
- "type": "string"
- },
- "usage": {
- "description": "Usage statistics for the request.",
- "type": "object",
- "properties": {
- "prompt_tokens": {
- "description": "The number of tokens in the input.",
- "type": "integer"
- },
- "total_tokens": {
- "description": "The total number of tokens processed.",
- "type": "integer"
- }
- },
- "required": [
- "prompt_tokens",
- "total_tokens"
- ]
- }
- },
- "required": [
- "object",
- "data",
- "model",
- "usage"
- ]
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- }
- ],
- "inference": [
- {
- "serverUrl": "https://models.github.ai",
- "verb": "post",
- "requestPath": "/orgs/{org}/inference/chat/completions",
- "title": "Run an inference request attributed to an organization",
- "category": "models",
- "subcategory": "inference",
- "parameters": [
- {
- "in": "query",
- "required": false,
- "name": "api-version",
- "description": "The API version to use. Optional, but required for some features.
",
- "schema": {
- "type": "string"
- }
- },
- {
- "in": "path",
- "name": "org",
- "required": true,
- "description": "The organization login associated with the organization to which the request is to be attributed.
",
- "schema": {
- "type": "string"
- }
- }
- ],
- "bodyParameters": [
- {
- "type": "string",
- "name": "model",
- "description": "ID of the specific model to use for the request. The model ID should be in the format of {publisher}/{model_name} where \"openai/gpt-4.1\" is an example of a model ID. You can find supported models in the catalog/models endpoint.
",
- "isRequired": true
- },
- {
- "type": "array of objects",
- "name": "messages",
- "description": "The collection of context messages associated with this chat completion request. Typical usage begins with a chat message for the System role that provides instructions for the behavior of the assistant, followed by alternating messages between the User and Assistant roles.
",
- "isRequired": true,
- "childParamsGroups": [
- {
- "type": "string",
- "name": "role",
- "description": "The chat role associated with this message
",
- "isRequired": true,
- "enum": [
- "assistant",
- "developer",
- "system",
- "user"
- ]
- },
- {
- "type": "string",
- "name": "content",
- "description": "The content of the message
",
- "isRequired": true
- }
- ]
- },
- {
- "type": "number",
- "name": "frequency_penalty",
- "description": "A value that influences the probability of generated tokens appearing based on their cumulative frequency in generated text. Positive values will make tokens less likely to appear as their frequency increases and decrease the likelihood of the model repeating the same statements verbatim. Supported range is [-2, 2].
"
- },
- {
- "type": "integer",
- "name": "max_tokens",
- "description": "The maximum number of tokens to generate in the completion. The token count of your prompt plus max_tokens cannot exceed the model's context length. For example, if your prompt is 100 tokens and you set max_tokens to 50, the API will return a completion with a maximum of 50 tokens.
"
- },
- {
- "type": "array of strings",
- "name": "modalities",
- "description": "The modalities that the model is allowed to use for the chat completions response. The default modality is text. Indicating an unsupported modality combination results in a 422 error.\nSupported values are: text, audio
"
- },
- {
- "type": "number",
- "name": "presence_penalty",
- "description": "A value that influences the probability of generated tokens appearing based on their existing presence in generated text. Positive values will make tokens less likely to appear when they already exist and increase the model's likelihood to output new tokens. Supported range is [-2, 2].
"
- },
- {
- "type": "object",
- "name": "response_format",
- "description": "The desired format for the response.
",
- "childParamsGroups": [
- {
- "type": "object",
- "name": "Object",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "type",
- "description": "",
- "enum": [
- "text",
- "json_object"
- ]
- }
- ]
- },
- {
- "type": "object",
- "name": "Schema for structured JSON response",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "type",
- "description": "The type of the response.
",
- "isRequired": true,
- "enum": [
- "json_schema"
- ]
- },
- {
- "type": "object",
- "name": "json_schema",
- "description": "The JSON schema for the response.
",
- "isRequired": true
- }
- ]
- }
- ],
- "oneOfObject": true
- },
- {
- "type": "integer",
- "name": "seed",
- "description": "If specified, the system will make a best effort to sample deterministically such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed.
"
- },
- {
- "type": "boolean",
- "name": "stream",
- "description": "A value indicating whether chat completions should be streamed for this request.
",
- "default": false
- },
- {
- "type": "object",
- "name": "stream_options",
- "description": "Whether to include usage information in the response. Requires stream to be set to true.
",
- "childParamsGroups": [
- {
- "type": "boolean",
- "name": "include_usage",
- "description": "Whether to include usage information in the response.
",
- "default": false
- }
- ]
- },
- {
- "type": "array of strings",
- "name": "stop",
- "description": "A collection of textual sequences that will end completion generation.
"
- },
- {
- "type": "number",
- "name": "temperature",
- "description": "The sampling temperature to use that controls the apparent creativity of generated completions. Higher values will make output more random while lower values will make results more focused and deterministic. It is not recommended to modify temperature and top_p for the same completion request as the interaction of these two settings is difficult to predict. Supported range is [0, 1]. Decimal values are supported.
"
- },
- {
- "type": "string",
- "name": "tool_choice",
- "description": "If specified, the model will configure which of the provided tools it can use for the chat completions response.
",
- "enum": [
- "auto",
- "required",
- "none"
- ]
- },
- {
- "type": "array of objects",
- "name": "tools",
- "description": "A list of tools the model may request to call. Currently, only functions are supported as a tool. The model may respond with a function call request and provide the input arguments in JSON format for that function.
",
- "childParamsGroups": [
- {
- "type": "object",
- "name": "function",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "name",
- "description": "The name of the function to be called.
"
- },
- {
- "type": "string",
- "name": "description",
- "description": "A description of what the function does. The model will use this description when selecting the function and interpreting its parameters.
"
- },
- {
- "type": "",
- "name": "parameters",
- "description": "The parameters the function accepts, described as a JSON Schema object.
"
- }
- ]
- },
- {
- "type": "string",
- "name": "type",
- "description": "",
- "enum": [
- "function"
- ]
- }
- ]
- },
- {
- "type": "number",
- "name": "top_p",
- "description": "An alternative to sampling with temperature called nucleus sampling. This value causes the model to consider the results of tokens with the provided probability mass. As an example, a value of 0.15 will cause only the tokens comprising the top 15% of probability mass to be considered. It is not recommended to modify temperature and top_p for the same request as the interaction of these two settings is difficult to predict. Supported range is [0, 1]. Decimal values are supported.
"
- }
- ],
- "descriptionHTML": "This endpoint allows you to run an inference request attributed to a specific organization. You must be a member of the organization and have enabled models to use this endpoint.\nThe token used to authenticate must have the models: read permission if using a fine-grained PAT or GitHub App minted token.\nThe request body should contain the model ID and the messages for the chat completion request. The response will include either a non-streaming or streaming response based on the request parameters.
",
- "codeExamples": [
- {
- "request": {
- "contentType": "application/json",
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json",
- "bodyParameters": {
- "model": "openai/gpt-4.1",
- "messages": [
- {
- "role": "user",
- "content": "What is the capital of France?"
- }
- ]
- },
- "parameters": {
- "org": "ORG"
- }
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": {
- "choices": [
- {
- "message": {
- "content": "The capital of France is Paris.",
- "role": "assistant"
- }
- }
- ]
- },
- "schema": {
- "type": "object",
- "oneOf": [
- {
- "title": "Non Streaming Response",
- "description": "A non-streaming response for the inference request.",
- "type": "object",
- "properties": {
- "choices": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "message": {
- "description": "The message associated with the completion.",
- "type": "object",
- "properties": {
- "content": {
- "description": "The content of the message.",
- "type": "string"
- },
- "role": {
- "description": "The role of the message.",
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- },
- {
- "title": "Streaming Response",
- "description": "A streaming response for the inference request",
- "type": "object",
- "properties": {
- "data": {
- "description": "Some details about the response.",
- "type": "object",
- "properties": {
- "choices": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "delta": {
- "description": "Container for the content of the streamed response.",
- "type": "object",
- "properties": {
- "content": {
- "description": "The content of the streamed response.",
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- ]
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- },
- {
- "serverUrl": "https://models.github.ai",
- "verb": "post",
- "requestPath": "/inference/chat/completions",
- "title": "Run an inference request",
- "category": "models",
- "subcategory": "inference",
- "parameters": [
- {
- "in": "query",
- "required": false,
- "name": "api-version",
- "description": "The API version to use. Optional, but required for some features.
",
- "schema": {
- "type": "string"
- }
- }
- ],
- "bodyParameters": [
- {
- "type": "string",
- "name": "model",
- "description": "ID of the specific model to use for the request. The model ID should be in the format of {publisher}/{model_name} where \"openai/gpt-4.1\" is an example of a model ID. You can find supported models in the catalog/models endpoint.
",
- "isRequired": true
- },
- {
- "type": "array of objects",
- "name": "messages",
- "description": "The collection of context messages associated with this chat completion request. Typical usage begins with a chat message for the System role that provides instructions for the behavior of the assistant, followed by alternating messages between the User and Assistant roles.
",
- "isRequired": true,
- "childParamsGroups": [
- {
- "type": "string",
- "name": "role",
- "description": "The chat role associated with this message
",
- "isRequired": true,
- "enum": [
- "assistant",
- "developer",
- "system",
- "user"
- ]
- },
- {
- "type": "string",
- "name": "content",
- "description": "The content of the message
",
- "isRequired": true
- }
- ]
- },
- {
- "type": "number",
- "name": "frequency_penalty",
- "description": "A value that influences the probability of generated tokens appearing based on their cumulative frequency in generated text. Positive values will make tokens less likely to appear as their frequency increases and decrease the likelihood of the model repeating the same statements verbatim. Supported range is [-2, 2].
"
- },
- {
- "type": "integer",
- "name": "max_tokens",
- "description": "The maximum number of tokens to generate in the completion. The token count of your prompt plus max_tokens cannot exceed the model's context length. For example, if your prompt is 100 tokens and you set max_tokens to 50, the API will return a completion with a maximum of 50 tokens.
"
- },
- {
- "type": "array of strings",
- "name": "modalities",
- "description": "The modalities that the model is allowed to use for the chat completions response. The default modality is text. Indicating an unsupported modality combination results in a 422 error.\nSupported values are: text, audio
"
- },
- {
- "type": "number",
- "name": "presence_penalty",
- "description": "A value that influences the probability of generated tokens appearing based on their existing presence in generated text. Positive values will make tokens less likely to appear when they already exist and increase the model's likelihood to output new tokens. Supported range is [-2, 2].
"
- },
- {
- "type": "object",
- "name": "response_format",
- "description": "The desired format for the response.
",
- "childParamsGroups": [
- {
- "type": "object",
- "name": "Object",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "type",
- "description": "",
- "enum": [
- "text",
- "json_object"
- ]
- }
- ]
- },
- {
- "type": "object",
- "name": "Schema for structured JSON response",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "type",
- "description": "The type of the response.
",
- "isRequired": true,
- "enum": [
- "json_schema"
- ]
- },
- {
- "type": "object",
- "name": "json_schema",
- "description": "The JSON schema for the response.
",
- "isRequired": true
- }
- ]
- }
- ],
- "oneOfObject": true
- },
- {
- "type": "integer",
- "name": "seed",
- "description": "If specified, the system will make a best effort to sample deterministically such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed.
"
- },
- {
- "type": "boolean",
- "name": "stream",
- "description": "A value indicating whether chat completions should be streamed for this request.
",
- "default": false
- },
- {
- "type": "object",
- "name": "stream_options",
- "description": "Whether to include usage information in the response. Requires stream to be set to true.
",
- "childParamsGroups": [
- {
- "type": "boolean",
- "name": "include_usage",
- "description": "Whether to include usage information in the response.
",
- "default": false
- }
- ]
- },
- {
- "type": "array of strings",
- "name": "stop",
- "description": "A collection of textual sequences that will end completion generation.
"
- },
- {
- "type": "number",
- "name": "temperature",
- "description": "The sampling temperature to use that controls the apparent creativity of generated completions. Higher values will make output more random while lower values will make results more focused and deterministic. It is not recommended to modify temperature and top_p for the same completion request as the interaction of these two settings is difficult to predict. Supported range is [0, 1]. Decimal values are supported.
"
- },
- {
- "type": "string",
- "name": "tool_choice",
- "description": "If specified, the model will configure which of the provided tools it can use for the chat completions response.
",
- "enum": [
- "auto",
- "required",
- "none"
- ]
- },
- {
- "type": "array of objects",
- "name": "tools",
- "description": "A list of tools the model may request to call. Currently, only functions are supported as a tool. The model may respond with a function call request and provide the input arguments in JSON format for that function.
",
- "childParamsGroups": [
- {
- "type": "object",
- "name": "function",
- "description": "",
- "childParamsGroups": [
- {
- "type": "string",
- "name": "name",
- "description": "The name of the function to be called.
"
- },
- {
- "type": "string",
- "name": "description",
- "description": "A description of what the function does. The model will use this description when selecting the function and interpreting its parameters.
"
- },
- {
- "type": "",
- "name": "parameters",
- "description": "The parameters the function accepts, described as a JSON Schema object.
"
- }
- ]
- },
- {
- "type": "string",
- "name": "type",
- "description": "",
- "enum": [
- "function"
- ]
- }
- ]
- },
- {
- "type": "number",
- "name": "top_p",
- "description": "An alternative to sampling with temperature called nucleus sampling. This value causes the model to consider the results of tokens with the provided probability mass. As an example, a value of 0.15 will cause only the tokens comprising the top 15% of probability mass to be considered. It is not recommended to modify temperature and top_p for the same request as the interaction of these two settings is difficult to predict. Supported range is [0, 1]. Decimal values are supported.
"
- }
- ],
- "descriptionHTML": "This endpoint allows you to run an inference request. The token used to authenticate must have the models: read permission if using a fine-grained PAT or GitHub App minted token.\nThe request body should contain the model ID and\nthe messages for the chat completion request. The response will include either a non-streaming or streaming response based on the request parameters.
",
- "codeExamples": [
- {
- "request": {
- "contentType": "application/json",
- "description": "Example",
- "acceptHeader": "application/vnd.github.v3+json",
- "bodyParameters": {
- "model": "openai/gpt-4.1",
- "messages": [
- {
- "role": "user",
- "content": "What is the capital of France?"
- }
- ]
- }
- },
- "response": {
- "statusCode": "200",
- "contentType": "application/json",
- "description": "",
- "example": {
- "choices": [
- {
- "message": {
- "content": "The capital of France is Paris.",
- "role": "assistant"
- }
- }
- ]
- },
- "schema": {
- "type": "object",
- "oneOf": [
- {
- "title": "Non Streaming Response",
- "description": "A non-streaming response for the inference request.",
- "type": "object",
- "properties": {
- "choices": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "message": {
- "description": "The message associated with the completion.",
- "type": "object",
- "properties": {
- "content": {
- "description": "The content of the message.",
- "type": "string"
- },
- "role": {
- "description": "The role of the message.",
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- },
- {
- "title": "Streaming Response",
- "description": "A streaming response for the inference request",
- "type": "object",
- "properties": {
- "data": {
- "description": "Some details about the response.",
- "type": "object",
- "properties": {
- "choices": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "delta": {
- "description": "Container for the content of the streamed response.",
- "type": "object",
- "properties": {
- "content": {
- "description": "The content of the streamed response.",
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- ]
- }
- }
- }
- ],
- "statusCodes": [
- {
- "httpStatusCode": "200",
- "description": "OK
"
- }
- ],
- "previews": []
- }
- ]
-}
\ No newline at end of file
diff --git a/src/rest/scripts/update-files.ts b/src/rest/scripts/update-files.ts
index 477d016ebd90..cba599edecf2 100755
--- a/src/rest/scripts/update-files.ts
+++ b/src/rest/scripts/update-files.ts
@@ -22,7 +22,6 @@ import { syncWebhookData } from '../../webhooks/scripts/sync'
import { syncGitHubAppsData } from '../../github-apps/scripts/sync'
import { syncRestRedirects } from './utils/get-redirects'
import { syncChangelogs } from './utils/sync-changelogs'
-import { MODELS_GATEWAY_ROOT, injectModelsSchema } from './utils/inject-models-schema'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const TEMP_OPENAPI_DIR = path.join(__dirname, '../../../rest-api-description/openApiTemp')
@@ -50,8 +49,8 @@ program
'-s, --source-repos [repos...]',
`The source repositories to get the dereferenced files from. When the source repo is ${REST_API_DESCRIPTION_ROOT}, the bundler is not run to generate the source dereferenced OpenAPI files because the ${REST_API_DESCRIPTION_ROOT} repo already contains them.`,
)
- .choices(['github', REST_API_DESCRIPTION_ROOT, MODELS_GATEWAY_ROOT])
- .default(['github', MODELS_GATEWAY_ROOT]),
+ .choices(['github', REST_API_DESCRIPTION_ROOT])
+ .default(['github']),
)
.option(
'-v --versions [VERSIONS...]',
@@ -130,7 +129,7 @@ async function main() {
if (pipelines.includes('rest')) {
console.log(`\n▶️ Generating REST data files...\n`)
- await syncRestData(TEMP_OPENAPI_DIR, restSchemas, sourceRepoDirectory, injectModelsSchema)
+ await syncRestData(TEMP_OPENAPI_DIR, restSchemas, sourceRepoDirectory)
await syncChangelogs(sourceRepoDirectory, VERSION_NAMES)
}
diff --git a/src/rest/scripts/utils/inject-models-schema.ts b/src/rest/scripts/utils/inject-models-schema.ts
deleted file mode 100644
index 2a1d299f44a9..000000000000
--- a/src/rest/scripts/utils/inject-models-schema.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { load } from 'js-yaml'
-import dereferenceJsonSchema from 'dereference-json-schema'
-import { existsSync } from 'fs'
-import { readFile, readdir } from 'fs/promises'
-
-import type { OpenApiSchema, OpenApiServer } from './openapi-types'
-
-export const MODELS_GATEWAY_ROOT = 'models-gateway'
-const MODELS_GATEWAY_PATH = 'docs/api'
-
-// The github-models REST API OpenAPI descriptions live in a separate repo, github/models-gateway.
-// We "inject" the descriptions from that repo into the core GitHub API descriptions so that
-// from the perspective of our app code,
-// models descriptions are part of the same REST API schema and don't need additional processing
-export async function injectModelsSchema(
- schema: OpenApiSchema,
- schemaName: string,
-): Promise {
- if (!schemaName.includes('fpt')) {
- return schema
- }
-
- const modelEndpoints = (
- await readdir(`./${MODELS_GATEWAY_ROOT}/${MODELS_GATEWAY_PATH}`, {
- recursive: true,
- })
- ).filter((name) => name.endsWith('.yaml') || name.endsWith('.yml'))
-
- for (let endpointPath of modelEndpoints) {
- endpointPath = `./${MODELS_GATEWAY_ROOT}/${MODELS_GATEWAY_PATH}/${endpointPath}`
- if (!existsSync(endpointPath)) {
- console.warn(
- `⚠️ Models gateway YAML file not found at ${endpointPath}. Skipping injection for ${schemaName}.`,
- )
- continue
- }
-
- const yamlContent = await readFile(endpointPath, 'utf8')
- const loadedYaml = load(yamlContent) as {
- openapi: string
- info?: unknown
- servers?: OpenApiServer[]
- paths?: Record>
- }
- const deferencedYaml = dereferenceJsonSchema.dereferenceSync(loadedYaml)
-
- // Copy over top-level OpenAPI fields
- // Cast to OpenApiSchema because dereference-json-schema doesn't include OpenAPI-specific properties in its type
- const openApiYaml = deferencedYaml as unknown as OpenApiSchema
- schema.openapi = schema.openapi || openApiYaml.openapi
- schema.info = schema.info || openApiYaml.info
- schema.servers = schema.servers || openApiYaml.servers
-
- // Process each path and operation in the YAML
- for (const path of Object.keys(openApiYaml.paths || {})) {
- for (const operation of Object.keys(openApiYaml.paths![path])) {
- const operationObject = openApiYaml.paths![path][operation]
-
- // Use values from the YAML where possible
- const name = operationObject.summary || ''
-
- console.log(`⏳ Processing operation: ${name} (${path} ${operation})`)
-
- // Create enhanced operation with custom fields needed for our REST docs
- // The spread operator preserves all original OpenAPI fields
- const enhancedOperation = {
- ...operationObject,
- // Add custom fields for our docs processing
- verb: operation,
- requestPath: path,
- // Override tags with default if not present
- tags: operationObject.tags || ['models'],
- }
-
- // Preserve operation-level servers if present
- // !Needed! to use models.github.ai instead of api.github.com
- if (openApiYaml.servers) {
- enhancedOperation.servers = openApiYaml.servers
- }
-
- // Add the enhanced operation to the schema
- if (!schema.paths) schema.paths = {}
- schema.paths[path] = schema.paths[path] || {}
- schema.paths[path][operation] = enhancedOperation
-
- console.log(`✅ Processed operation: ${name} (${path} ${operation})`)
- }
- }
- }
-
- return schema
-}
diff --git a/src/rest/scripts/utils/openapi-types.ts b/src/rest/scripts/utils/openapi-types.ts
index 1fbaf04064d2..128d9d3509c7 100644
--- a/src/rest/scripts/utils/openapi-types.ts
+++ b/src/rest/scripts/utils/openapi-types.ts
@@ -1,5 +1,5 @@
// Loose-but-typed OpenAPI shapes shared across the REST sync pipeline
-// (get-operations, operation, create-rest-examples, inject-models-schema, sync).
+// (get-operations, operation, create-rest-examples, sync).
//
// The upstream OpenAPI descriptions are dynamic and vary by endpoint, so each
// interface keeps an index signature escape hatch (`[key: string]: unknown`)