Skip to main content

Métriques d’utilisation et de facturation

Ce guide montre comment lire les nombres de jetons, l’utilisation de fenêtre contextuelle, le coût de crédit d’IA et le quota de comptes à partir d’une application du KIT de développement logiciel (SDK) Copilot. Des exemples sont présentés pour TypeScript, Python, Go, .NET, Java et Rust.

Conseil

Chaque exemple est fonctionnellement équivalent entre les langages. L’extrait de code TypeScript est développé par défaut ; sélectionnez votre langue dans les blocs réductibles pour afficher la même logique dans ce Kit de développement logiciel (SDK).

Vue d’ensemble

Le SDK expose les données d’utilisation par le biais de deux mécanismes complémentaires :

  • Événements de session : événements éphémères que le runtime émet en tant qu’exécution de tour. Abonnez-vous à ces données pour les données d’appel par API en temps réel.
  • Méthodes RPC : appels de requête/réponse que vous effectuez à la demande. Utilisez-les pour effectuer des captures instantanées cumulées ou rechercher un quota au niveau du compte.

Le tableau ci-dessous mappe chaque signal à l’API qui l’expose.

SignalAPIScopeType
Nombre de jetons par appel
événement assistant.usageSessionÉvénement
Utilisation de la fenêtre contextuelle
événement session.usage_infoSessionÉvénement
Répartition des fenêtres contextuelles (à la demande)session.metadata.contextInfoSessionRPC
Nombre total cumulé de crédits et de jetons d’IAsession.usage.getMetricsSessionRPC
Tarification du crédit IA par modèlemodels.listServeurRPC
Interactions avec le quota de compte et premiumaccount.getQuotaServeurRPC

Remarque

session.usage.getMetrics, session.metadata.contextInfoet session.metadata.recomputeContextTokens sont marqués expérimentaux dans la surface RPC générée. Dans .NET ils déclenchent le GHCP001 diagnostic expérimental, que vous supprimez avec ou au #pragma warning disable GHCP001 niveau <NoWarn>GHCP001</NoWarn>du projet. Épinglez le Kit de développement logiciel (SDK) et le runtime cli Copilot si votre application en dépend.

Les tableaux de champs ci-dessous répertorient uniquement les champs utilisés dans les exemples de cette page. La référence de champ complète et toujours actuelle est les types de SDK générés et Événements de session de streaming, qui est régénéré à partir du schéma CLI sur chaque bosse de dépendance. Traitez-les comme la source de la vérité et cette page comme un guide orienté tâches.

Nombre de jetons par appel

L’événement assistant.usage est émis une fois pour chaque appel d’API de modèle à son tour (y compris les appels effectués par les sous-agents). Il porte le nombre de jetons et le multiplicateur de facturation pour cet appel unique.

L’exemple ci-dessous utilise ces champs. Consultez Événements de session de streaming pour obtenir la liste complète, notamment le cache, le raisonnement, la latence et les champs de suivi.

ChampTypeDescription
modelstringIdentificateur de modèle pour cet appel
inputTokensnumberJetons d’entrée consommés
outputTokensnumberJetons de sortie produits
costnumberMultiplicateur de demande Premium appliqué à cet appel

Conseil

assistant.usage est éphémère, donc il est livré en direct mais pas relecture lorsque vous reprenez une session. Pour lire les totaux cumulés après le fait, appelez session.usage.getMetrics (voir Crédits d’IA cumulés et totaux de jetons).

Langages de code navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();
const session = await client.createSession({ streaming: true });

session.on("assistant.usage", (event) => {
    const { model, inputTokens, outputTokens, cost } = event.data;
    console.log(
        `${model}: in=${inputTokens ?? 0} out=${outputTokens ?? 0} cost=${cost ?? 0}`,
    );
});
session.on("assistant.usage", (event) => {
    const { model, inputTokens, outputTokens, cost } = event.data;
    console.log(
        `${model}: in=${inputTokens ?? 0} out=${outputTokens ?? 0} cost=${cost ?? 0}`,
    );
});

Utilisation de la fenêtre contextuelle

Les nombres de jetons vous indiquent ce que chaque appel a consommé. L’utilisation de la fenêtre contextuelle vous indique comment la fenêtre d’invite du modèle est complète pour l’instant, ce qui est utile pour afficher une barre de progression ou un avertissement à l’utilisateur avant le démarrage automatique de compactage.

Mises à jour actives avec session.usage_info

Le runtime émet un session.usage_info événement chaque fois que la taille de la fenêtre de contexte change. L’exemple utilise currentTokens et tokenLimit; consultez Événements de session de streaming pour la charge utile complète.

ChampTypeDescription
currentTokensnumberJetons actuellement dans la fenêtre de contexte
tokenLimitnumberNombre maximal de jetons pour la fenêtre de contexte du modèle

Langages de code navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();
const session = await client.createSession({ streaming: true });

session.on("session.usage_info", (event) => {
    const { currentTokens, tokenLimit } = event.data;
    const pct = Math.round((currentTokens / tokenLimit) * 100);
    console.log(`Context: ${currentTokens}/${tokenLimit} (${pct}%)`);
});
session.on("session.usage_info", (event) => {
    const { currentTokens, tokenLimit } = event.data;
    const pct = Math.round((currentTokens / tokenLimit) * 100);
    console.log(`Context: ${currentTokens}/${tokenLimit} (${pct}%)`);
});

Répartition à la demande avec session.metadata.contextInfo

Les événements se déclenchent uniquement lorsque le contexte change. Pour lire la répartition actuelle à tout moment, par exemple, juste après avoir repris une session, appelez session.metadata.contextInfo. 0 Passez pour promptTokenLimit utiliser la valeur par défaut du runtime ; passez 0 si outputTokenLimit la valeur est inconnue.

Le résultat est null jusqu’à ce que la session ait été initialisée (l’invite système et les métadonnées de l’outil contextInfo ont été mises en cache). Il décompose le total en systemTokens, conversationTokenset toolDefinitionsTokens, en même temps que le promptTokenLimit.

Langages de code navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();
const session = await client.createSession({});

const { contextInfo } = await session.rpc.metadata.contextInfo({
    promptTokenLimit: 0,
    outputTokenLimit: 0,
});

if (contextInfo) {
    console.log(
        `Total ${contextInfo.totalTokens}/${contextInfo.promptTokenLimit} ` +
            `(system=${contextInfo.systemTokens}, conversation=${contextInfo.conversationTokens})`,
    );
}
const { contextInfo } = await session.rpc.metadata.contextInfo({
    promptTokenLimit: 0,
    outputTokenLimit: 0,
});

if (contextInfo) {
    console.log(
        `Total ${contextInfo.totalTokens}/${contextInfo.promptTokenLimit} ` +
            `(system=${contextInfo.systemTokens}, conversation=${contextInfo.conversationTokens})`,
    );
}

Nombre total cumulé de crédits et de jetons d’IA

session.usage.getMetrics retourne les totaux en cours d’exécution pour l’ensemble de la session dans un seul appel. Il s’agit du moyen le plus propre de lire le coût du crédit IA, car il agrège chaque appel d’API (agent principal et sous-agents) pour vous.

L’exemple utilise les champs ci-dessous. Le type généré UsageGetMetricsResult est la référence complète.

ChampTypeDescription
totalNanoAiunumberCoût de crédit IA à l’échelle de la session, en unités nano-IA
totalPremiumRequestCostnumberCoût de la demande Premium sur tous les modèles, après les multiplicateurs
modelMetricsRecord<string, ModelMetric>Répartition par modèle ; chaque entrée a usage.inputTokens, usage.outputTokenset totalNanoAiu

Remarque

Le coût est signalé dans les unités nano-IA (le champ est nommé totalNanoAiu). La conversion exacte en crédits IA et la signification précise de la comptabilité des demandes Premium sont définies par GitHub Copilot facturation, et non par le KIT DE développement logiciel (SDK), traitez la documentation de facturation de GitHub Copilot comme source de vérité et de vérification avant de présenter des valeurs de type monétaire aux utilisateurs. Les exemples se divisent par 1e9 commodité, en suivant le préfixe SI nano . Vérifiez que cela correspond à la facturation actuelle avant de vous appuyer dessus. Les modelMetrics mappages et tokenDetails les mappages sont clés par des chaînes d’exécution (ID de modèle et noms de type jeton) que le système de type sdk ne valide pas.

Langages de code navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();
const session = await client.createSession({});

const metrics = await session.rpc.usage.getMetrics();

const aiCredits = (metrics.totalNanoAiu ?? 0) / 1e9;
console.log(`AI credits used: ${aiCredits.toFixed(6)}`);
console.log(`Premium requests: ${metrics.totalPremiumRequestCost}`);

for (const [model, m] of Object.entries(metrics.modelMetrics)) {
    if (!m) continue;
    console.log(
        `${model}: in=${m.usage.inputTokens} out=${m.usage.outputTokens} ` +
            `nanoAiu=${m.totalNanoAiu ?? 0}`,
    );
}
const metrics = await session.rpc.usage.getMetrics();

const aiCredits = (metrics.totalNanoAiu ?? 0) / 1e9;
console.log(`AI credits used: ${aiCredits.toFixed(6)}`);
console.log(`Premium requests: ${metrics.totalPremiumRequestCost}`);

for (const [model, m] of Object.entries(metrics.modelMetrics)) {
    if (!m) continue;
    console.log(
        `${model}: in=${m.usage.inputTokens} out=${m.usage.outputTokens} ` +
            `nanoAiu=${m.totalNanoAiu ?? 0}`,
    );
}

Tarification du crédit IA par modèle

Pour estimer le coût avant d’exécuter un tour, lisez les prix des jetons de chaque modèle à partir de models.list. Il s’agit d’un appel étendu au serveur sur le client. Il n’a donc pas besoin d’une session. Les prix sont exprimés en crédits IA par lot de facturation de jetons. Le type généré ModelBillingTokenPrices répertorie chaque champ, y compris cachePrice.

ChampTypeDescription
billing.multipliernumberMultiplicateur de coût de la demande Premium par rapport au taux de base
billing.tokenPrices.inputPricenumberCoût de crédit IA par lot de jetons d’entrée
billing.tokenPrices.outputPricenumberCoût de crédit IA par lot de jetons de sortie
billing.tokenPrices.batchSizenumberNombre de jetons par lot de facturation

Remarque

Les valeurs de prix changent à mesure que les plans et les modèles évoluent. Lisez-les au moment de l’exécution, comme indiqué ci-dessous ; ne codez jamais en dur les nombres dans votre application.

Langages de code navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();

const { models } = await client.rpc.models.list({});

for (const model of models) {
    const prices = model.billing?.tokenPrices;
    if (!prices) continue;
    console.log(
        `${model.id}: input=${prices.inputPrice} output=${prices.outputPrice} ` +
            `per ${prices.batchSize} tokens (x${model.billing?.multiplier ?? 1})`,
    );
}
const { models } = await client.rpc.models.list({});

for (const model of models) {
    const prices = model.billing?.tokenPrices;
    if (!prices) continue;
    console.log(
        `${model.id}: input=${prices.inputPrice} output=${prices.outputPrice} ` +
            `per ${prices.batchSize} tokens (x${model.billing?.multiplier ?? 1})`,
    );
}

Interactions avec le quota de compte et premium

account.getQuotasignale le droit d'Copilot restant de l'utilisateur authentifié. La carte du résultat est clé par type de quotaSnapshots quota , généralement premium_interactions, chatet completions. Utilisez-le pour montrer aux utilisateurs la quantité de leur allocation mensuelle restante ou pour effectuer un travail avant d’atteindre une limite.

L’exemple utilise les champs ci-dessous ; le type généré AccountQuotaSnapshot est la référence complète. Les quotaSnapshots clés sont des chaînes d’exécution que le système de type du Kit de développement logiciel (SDK) ne valide pas. Par conséquent, protégez vos recherches.

ChampTypeDescription
entitlementRequestsnumberDemandes incluses dans le droit d’utilisation ou -1 illimitées
usedRequestsnumberDemandes utilisées jusqu’à présent cette période
remainingPercentagenumberPourcentage du droit restant
resetDatestringDate de réinitialisation du quota ISO 8601

Conseil

Pour lire le quota pour un utilisateur spécifique plutôt que le contexte d'authentification global de la connexion (par exemple, dans un serveur principal multilocataire), transmettez le jeton GitHub de cet utilisateur à getQuota. Consultez « Multilocataire et déploiements de serveurs ».

Langages de code navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();

const { quotaSnapshots } = await client.rpc.account.getQuota({});
const premium = quotaSnapshots["premium_interactions"];

if (premium) {
    console.log(
        `Premium interactions: ${premium.usedRequests}/${premium.entitlementRequests} ` +
            `(${premium.remainingPercentage.toFixed(1)}% left, resets ${premium.resetDate ?? "n/a"})`,
    );
}
const { quotaSnapshots } = await client.rpc.account.getQuota({});
const premium = quotaSnapshots["premium_interactions"];

if (premium) {
    console.log(
        `Premium interactions: ${premium.usedRequests}/${premium.entitlementRequests} ` +
            `(${premium.remainingPercentage.toFixed(1)}% left, resets ${premium.resetDate ?? "n/a"})`,
    );
}

Choix de l’API appropriée

Utilisez ce résumé pour déterminer l’API qui correspond à votre cas d’usage :

  • Afficher un coût réel ou un compteur de jetons en tant qu’exécution de tour : s’abonner à assistant.usage et session.usage_info.
  • Afficher un résumé des coûts finals après un tour ou une session : appel session.usage.getMetrics.
  • Afficher l’utilisation de la fenêtre contextuelle lors de la reprise, avant tout nouveau tour : appel session.metadata.contextInfo.
  • Estimer le coût avant l’exécution du travail : lire models.list les prix des jetons.
  • Avertir les utilisateurs avant qu’ils n’épuisent leur plan : appel account.getQuota.

Lectures complémentaires