From 8d56d33e9f18fa89efe1c8f127e3a194676163cc Mon Sep 17 00:00:00 2001 From: Alex Rudenko Date: Fri, 23 Jan 2026 13:50:26 +0100 Subject: [PATCH] chore: token count tool --- package.json | 3 ++- scripts/count_tokens.ts | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 scripts/count_tokens.ts diff --git a/package.json b/package.json index 0a28358a8..4d6dd4104 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "test:update-snapshots": "npm run build && node scripts/test.mjs --test-update-snapshots", "prepare": "node --experimental-strip-types scripts/prepare.ts", "verify-server-json-version": "node --experimental-strip-types scripts/verify-server-json-version.ts", - "eval": "npm run build && node --experimental-strip-types scripts/eval_gemini.ts" + "eval": "npm run build && node --experimental-strip-types scripts/eval_gemini.ts", + "count-tokens": "node --experimental-strip-types scripts/count_tokens.ts" }, "files": [ "build/src", diff --git a/scripts/count_tokens.ts b/scripts/count_tokens.ts new file mode 100644 index 000000000..178e12688 --- /dev/null +++ b/scripts/count_tokens.ts @@ -0,0 +1,33 @@ +/** + * @license + * Copyright 2026 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import {parseArgs} from 'node:util'; + +import {GoogleGenAI} from '@google/genai'; + +const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY}); + +const {values, positionals} = parseArgs({ + options: { + model: { + type: 'string', + default: 'gemini-2.5-flash', + }, + }, + allowPositionals: true, +}); + +if (!positionals[0]) { + console.error('Usage: npm run count-tokens -- -- '); + process.exit(1); +} + +const response = await ai.models.countTokens({ + model: values.model, + contents: positionals[0], +}); +console.log(`Input: ${positionals[0]}`); +console.log(`Tokens: ${response.totalTokens}`);