Skip to main content

Métricas de uso y facturación

En esta guía se muestra cómo leer los recuentos de tokens, el uso de ventanas de contexto, el costo de crédito de IA y la cuota de la cuenta desde una aplicación del SDK de Copilot. Se muestran ejemplos para TypeScript, Python, Go, .NET, Java y Rust.

Sugerencia

Cada ejemplo es funcionalmente equivalente entre idiomas. El fragmento de código typeScript se expande de forma predeterminada; Seleccione el idioma de los bloques contraíbles para ver la misma lógica en ese SDK.

Información general

El SDK expone los datos de uso a través de dos mecanismos complementarios:

  • Eventos de sesión: eventos efímeros que el tiempo de ejecución emite como una ejecución de turnos. Suscríbase a ellos para datos de llamadas por API en tiempo real.
  • Métodos RPC: llamadas de solicitud y respuesta que realiza a petición. Úselos para realizar una instantánea de los totales acumulados o buscar la cuota de nivel de cuenta.

En la tabla siguiente se asigna cada señal a la API que la expone.

SeñalAPIÁmbitoTipo
Recuentos de tokens por llamada
assistant.usage eventoSessionEvent
Uso de la ventana de contexto
session.usage_info eventoSessionEvent
Desglose de la ventana de contexto (a petición)session.metadata.contextInfoSessionRPC
Totales acumulados de crédito y token de IAsession.usage.getMetricsSessionRPC
Precios de crédito por modelo de IAmodels.listServidorRPC
Cuota de cuenta e interacciones premiumaccount.getQuotaServidorRPC

Nota:

session.usage.getMetrics, session.metadata.contextInfoy session.metadata.recomputeContextTokens se marcan como experimentales en la superficie RPC generada. En .NET generan el GHCP001 diagnóstico experimental, que se suprime con o un #pragma warning disable GHCP001 nivel <NoWarn>GHCP001</NoWarn>de proyecto . Ancle tanto el SDK como el entorno de ejecución de la CLI de Copilot si la aplicación depende de ellos.

Las tablas de campos siguientes muestran solo los campos usados en los ejemplos de esta página. La referencia completa de campo siempre actual es los tipos de SDK generados más Eventos de la sesión de transmisión, que se vuelven a generar desde el esquema de la CLI en cada aumento de dependencia. Tratarlos como el origen de la verdad y esta página como una guía orientada a tareas.

Recuentos de tokens por llamada

El assistant.usage evento se emite una vez para cada llamada API de modelo a su vez (incluidas las llamadas realizadas por subagentes). Lleva los recuentos de tokens y el multiplicador de facturación de esa sola llamada.

En el ejemplo siguiente se usan estos campos. Consulte Eventos de la sesión de transmisión para obtener la lista completa, incluidos los campos de caché, razonamiento, latencia y seguimiento.

CampoTipoDescription
modelstringIdentificador de modelo para esta llamada
inputTokensnumberTokens de entrada consumidos
outputTokensnumberTokens de salida generados
costnumberMultiplicador de solicitudes Premium aplicado a esta llamada

Sugerencia

assistant.usage es efímero, por lo que se entrega en vivo pero no se reproduce cuando se reanuda una sesión. Para leer los totales acumulados después del hecho, llame session.usage.getMetrics a (consulte Crédito acumulado de IA y totales de token).

Lenguajes de código 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}`,
    );
});

Uso de la ventana de contexto

Los recuentos de tokens indican qué se consume cada llamada. El uso de la ventana de contexto indica cómo está completa la ventana de solicitud del modelo en este momento, útil para mostrar una barra de progreso o advertir al usuario antes de que se inicie la compactación automática.

Actualizaciones en directo con session.usage_info

El tiempo de ejecución emite un session.usage_info evento cada vez que cambia el tamaño de la ventana de contexto. En el ejemplo se usa currentTokens y tokenLimit; vea Eventos de la sesión de transmisión para obtener la carga completa.

CampoTipoDescription
currentTokensnumberTokens actualmente en la ventana de contexto
tokenLimitnumberNúmero máximo de tokens para la ventana de contexto del modelo

Lenguajes de código 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}%)`);
});

Desglose a petición con session.metadata.contextInfo

Los eventos solo se activan cuando cambia el contexto. Para leer el desglose actual en cualquier momento (por ejemplo, justo después de reanudar una sesión), llame a session.metadata.contextInfo. Pase 0 para promptTokenLimit que use el valor predeterminado en tiempo de ejecución; pase 0 para outputTokenLimit si el valor es desconocido.

El resultado contextInfo es null hasta que se ha inicializado la sesión (se han almacenado en caché la solicitud del sistema y los metadatos de la herramienta). Divide el total en systemTokens, conversationTokensy toolDefinitionsTokens, junto con promptTokenLimit.

Lenguajes de código 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})`,
    );
}

Totales acumulados de crédito y token de IA

session.usage.getMetrics devuelve los totales en ejecución de toda la sesión en una sola llamada. Esta es la manera más limpia de leer el costo de crédito de IA, ya que agrega cada llamada API (agente principal y subagentes) automáticamente.

En el ejemplo se usan los campos siguientes. El tipo generado UsageGetMetricsResult es la referencia completa.

CampoTipoDescription
totalNanoAiunumberCosto de crédito de IA en toda la sesión, en unidades de nano-AI
totalPremiumRequestCostnumberCosto de la solicitud Premium en todos los modelos, después de multiplicadores
modelMetricsRecord<string, ModelMetric>Desglose por modelo; cada entrada tiene usage.inputTokens, usage.outputTokensy totalNanoAiu

Nota:

El costo se notifica en unidades de nano-AI (el campo se denomina totalNanoAiu). La conversión exacta a créditos de IA y el significado preciso de la contabilidad de solicitudes premium se definen mediante GitHub Copilot facturación, no por el SDK, trata la documentación de facturación Copilot de GitHub como fuente de verdad y comprueba antes de exponer valores similares a moneda a los usuarios. Los ejemplos se dividen por 1e9 comodidad, siguiendo el prefijo SI nano ; confirme que coincide con la facturación actual antes de confiar en él. Las modelMetrics asignaciones y tokenDetails son clavedas por cadenas en tiempo de ejecución (identificadores de modelo y nombres de tipo de token) que el sistema de tipos de SDK no valida.

Lenguajes de código 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}`,
    );
}

Precios de crédito por modelo de IA

Para calcular el costo antes de ejecutar un turno, lea los precios del token de cada modelo de models.list. Se trata de una llamada de ámbito de servidor en el cliente, por lo que no necesita una sesión. Los precios se expresan en créditos de IA por lote de facturación de tokens. El tipo generado ModelBillingTokenPrices enumera todos los campos, incluido cachePrice.

CampoTipoDescription
billing.multipliernumberMultiplicador de costos de solicitud Premium en relación con la tasa base
billing.tokenPrices.inputPricenumberCosto de crédito de IA por lote de tokens de entrada
billing.tokenPrices.outputPricenumberCosto de crédito de IA por lote de tokens de salida
billing.tokenPrices.batchSizenumberNúmero de tokens por lote de facturación

Nota:

Los valores de precio cambian a medida que evolucionan los planes y los modelos. Léelas en tiempo de ejecución como se muestra a continuación; nunca codifique de forma rígida los números en la aplicación.

Lenguajes de código 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})`,
    );
}

Cuota de cuenta e interacciones premium

account.getQuotanotifica el derecho de Copilot restante del usuario autenticado. El mapa del quotaSnapshots resultado se clave por tipo de cuota, normalmente premium_interactions, chaty completions. Úselo para mostrar a los usuarios la cantidad de su asignación mensual que queda o para poner en marcha el trabajo antes de alcanzar un límite.

En el ejemplo se usan los campos siguientes; el tipo generado AccountQuotaSnapshot es la referencia completa. Las quotaSnapshots claves son cadenas en tiempo de ejecución que el sistema de tipos de SDK no valida, por lo que protege las búsquedas.

CampoTipoDescription
entitlementRequestsnumberSolicitudes incluidas en el derecho o -1 para un límite ilimitado
usedRequestsnumberSolicitudes usadas hasta ahora en este período
remainingPercentagenumberPorcentaje del derecho restante
resetDatestringFecha ISO 8601 cuando se restablece la cuota

Sugerencia

Para leer la cuota de un usuario específico en lugar del contexto de autenticación global de la conexión (por ejemplo, en un back-end multiinquilino), pase el token de GitHub del usuario a getQuota. Consulte Multiinquilino e implementaciones de servidor.

Lenguajes de código 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"})`,
    );
}

Elección de la API correcta

Use este resumen para decidir qué API se ajusta a su caso de uso:

  • Representar un medidor de token o costo en vivo como un turno se ejecuta: suscríbase a assistant.usage y session.usage_info.
  • Mostrar un resumen final de costos después de un turno o una sesión: llame a session.usage.getMetrics.
  • Mostrar el uso de la ventana de contexto en reanudación, antes de cualquier nuevo turno: llame a session.metadata.contextInfo.
  • Calcule el costo antes de ejecutar el trabajo: leer models.list los precios del token.
  • Advertir a los usuarios antes de agotar su plan: llame a account.getQuota.

Lectura adicional