Primeros pasos
De cero a tu primer dólar de IA medido en pocos minutos. Sin proxy, sin gateway y sin reescribir nada: envolvés el cliente que ya tenés.
Instalá
Corré esto en la carpeta de tu proyecto:
npx tokmetry initDetecta tu proyecto
La CLI detecta tu runtime, tu gestor de paquetes y los SDKs de IA que ya usás. Solo lee nombres de dependencias de
package.json: nunca abre tu código ni lee una key de proveedor.Ingresás desde el navegador
Abre tu navegador para autorizar esta máquina. La CLI nunca te pide el email ni la contraseña.
Elegís organización y proyecto
Definís a qué se atribuye el gasto. La CLI crea una API key del proyecto (se muestra una sola vez) y escribe
.tokmetry.json, que no tiene secretos, y tu.env. El.envse agrega al.gitignore.Instala el SDK y lo prueba
Instala
@tokmetry/sdkcon tu gestor de paquetes y manda un evento sintético para confirmar que la key funciona.
Opciones útiles
--yes- Toma todos los valores por defecto y no pregunta nada. Es también el modo en terminales no interactivas.
--no-install- Imprime el comando de instalación en lugar de ejecutarlo.
--no-browser- Muestra el link de autorización y el código en lugar de abrir un navegador (SSH, CI).
--project <id|slug>- Elige el proyecto sin preguntar.
--environment <nombre>development,stagingoproduction. Por defecto sigue aNODE_ENV.
Envolvé tu cliente
Una línea alrededor del cliente de OpenAI, Anthropic o Gemini que ya tenés. Tus llamadas quedan exactamente igual y cada una se mide sola, también con streaming.
import OpenAI from "openai";
import { wrapOpenAI } from "@tokmetry/sdk/openai";
const openai = wrapOpenAI(new OpenAI());
const completion = await openai.chat.completions.create({
model: "gpt-4.1-mini",
messages: [{ role: "user", content: "Hello" }],
});En tu dashboard (ejemplo)gpt-4.1-mini · 1,240 entrada · 310 salida · 812 ms · $0.00099
import Anthropic from "@anthropic-ai/sdk";
import { wrapAnthropic } from "@tokmetry/sdk/anthropic";
const anthropic = wrapAnthropic(new Anthropic());
const message = await anthropic.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});En tu dashboard (ejemplo)claude-sonnet-5 · 1,240 entrada · 310 salida · 1,140 ms · $0.00558
import { GoogleGenAI } from "@google/genai";
import { wrapGemini } from "@tokmetry/sdk/gemini";
const ai = wrapGemini(new GoogleGenAI({}));
const response = await ai.models.generateContent({
model: "gemini-3.5-flash",
contents: "Hello",
});En tu dashboard (ejemplo)gemini-3.5-flash · 1,240 entrada · 310 salida · 690 ms · $0.00465
¿Otro proveedor? Informá el uso a mano
Pasale a tokmetry.track() lo que tu proveedor ya devolvió en su payload usage. Es síncrono y nunca lanza errores.
import { tokmetry } from "@tokmetry/sdk";
tokmetry.track({
provider: "openai",
model: "gpt-4.1-mini",
usage: { inputTokens: 1_200, outputTokens: 340 },
latencyMs: 812,
statusCode: 200,
});Configuración
La CLI escribe estas variables por vos. Todo es opcional salvo la key.
| Variable | Qué hace | Por defecto |
|---|---|---|
TOKMETRY_API_KEY | La API key de tu proyecto. Sin ella el SDK queda deshabilitado: no hace llamadas HTTP ni lanza errores. | Ninguno |
TOKMETRY_PROJECT_ID | Informativa. El backend deduce el proyecto real a partir de la key. | Ninguno |
TOKMETRY_ENVIRONMENT | development, staging o production. | Según NODE_ENV |
TOKMETRY_API_URL | Manda los eventos a otra URL de la API. | La API de Tokmetry |
TOKMETRY_DEBUG | Muestra la actividad del SDK en la consola. Acepta 1, true, yes u on. | Apagado |
Las opciones que pasás en código a init() ganan sobre las variables de entorno, y estas ganan sobre los valores por defecto. Un valor inválido nunca lanza un error: vuelve al valor por defecto.
Cómo se envían los eventos
Pensado para que Tokmetry nunca se interponga en tu aplicación.
Por lotes, nunca un request por llamada
Los eventos esperan en memoria y salen por lotes: cada 100 eventos, cada 5 segundos y al cerrar el proceso.
Fail-open
Si Tokmetry no responde, tus llamadas a la IA siguen funcionando exactamente igual y los datos de uso se descartan en silencio. El SDK nunca lanza errores hacia tu código.
Reintentos sin contar doble
Los errores de red, los timeouts y las respuestas 408, 429 y 5xx se reintentan con espera creciente. Cada evento lleva un id único, así que un reintento nunca se cuenta dos veces. Los demás errores 4xx, como una key revocada, se descartan en lugar de reintentarse para siempre.
Streaming incluido
Las respuestas en streaming se miden cuando el stream termina, con el uso que informa el proveedor.
Qué sale de tu app
Solo metadata técnica y financiera: proveedor, modelo, cantidad de tokens, costo, latencia, código de estado y entorno. Los prompts, las respuestas y las API keys de proveedores nunca se leen, se envían ni se guardan.
¿Listo para ver tu gasto?
Creá una cuenta gratis, corré la CLI y tus primeros eventos aparecen en el dashboard en minutos.
Empezá gratis