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 de TypeScript aparece expandido de forma predeterminada; selecciona tu idioma en los bloques desplegables para ver la misma lógica en ese SDK correspondiente.

Información general

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

  • Eventos de sesión: eventos transitorios que el entorno de ejecución emite mientras se ejecuta un turno. Suscríbase a estas para obtener datos en tiempo real de cada llamada a la API.
  • Métodos RPC: llamadas de petición-respuesta que se realizan bajo demanda. Úselos para obtener una instantánea de los totales acumulados o consultar la cuota de la 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éditos y tokens 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 emiten el GHCP001 diagnóstico experimental, que se suprime con #pragma warning disable GHCP001 o un <NoWarn>GHCP001</NoWarn> en el nivel 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 de campos completa y siempre actualizada la componen los tipos generados del SDK y Eventos de la sesión de transmisión, que se regenera a partir del esquema de la CLI con cada actualización de dependencias. Trátelos como la fuente de la verdad y esta página como una guía orientada a tareas.

Recuentos de tokens por llamada

El evento assistant.usage se emite una vez por cada llamada a la API del modelo en un turno (incluidas las llamadas realizadas por los subagentes). Incluye los recuentos de tokens y el multiplicador de facturación de esa llamada concreta.

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 a posteriori, llame a session.usage.getMetrics (consulte Crédito de IA acumulado y totales de tokens).

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 te indican cuántos consumió 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 entorno de ejecución emite el evento session.usage_info 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éditos y tokens de IA

session.usage.getMetrics devuelve los totales acumulados de toda la sesión en una sola llamada. Esta es la forma más clara de consultar el coste de los créditos de IA, porque agrega por ti cada llamada a la API (agente principal y subagentes).

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

CampoTipoDescription
totalNanoAiunumberCoste de créditos de IA de toda la sesión, en unidades nano-IA
totalPremiumRequestCostnumberCoste de la solicitud prémium para todos los modelos, tras aplicar los 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 del cómputo de las solicitudes prémium los define la facturación de GitHub Copilot, no el SDK; considera la documentación de facturación de Copilot de GitHub como la fuente autorizada y verifícala antes de mostrar a los usuarios valores de tipo monetario. Los ejemplos usan la división por 1e9 por comodidad, siguiendo el prefijo nano del SI; confirme que esto coincide con la facturación actual antes de basarse en ello. Los mapas modelMetrics y tokenDetails se codifican mediante cadenas de tiempo de ejecución (ID de modelos y nombres de tipo de token) que el sistema de tipo 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 coste antes de ejecutar un turno, lea los precios del token de cada modelo de models.list. Se trata de una llamada con ámbito de servidor en el cliente, por lo que no requiere una sesión. Los precios se expresan en créditos de IA por cada lote de tokens facturado. 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.getQuota notifica el derecho de Copilot restante del usuario autenticado. El mapa quotaSnapshots del resultado se codifica por tipo de cuota, normalmente premium_interactions, chat y completions. Úselo para mostrar a los usuarios cuánto les queda de su cuota mensual o para bloquear el trabajo antes de que alcancen el límite.

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

CampoTipoDescription
entitlementRequestsnumberSolicitudes incluidas en el plan, o -1 para solicitudes ilimitadas
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 en directo de costes o tokens mientras se ejecuta un turno**: suscríbase a `assistant.usage` y `session.usage_info`.
    
  • Mostrar un resumen final de costes al final de un turno o de una sesión: llamar a session.usage.getMetrics.
  •           **Mostrar el uso de la ventana de contexto al reanudar, 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