{"_id":"@aymenbzz/ai-token-counter","_rev":"2-0e5b036e61a757a240c9cd01450c02b4","name":"@aymenbzz/ai-token-counter","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@aymenbzz/ai-token-counter","version":"1.0.0","keywords":["ai","token","counter","openai","claude","gemini","tiktoken","cli"],"author":{"name":"aymenbz"},"license":"MIT","_id":"@aymenbzz/ai-token-counter@1.0.0","maintainers":[{"name":"aymenbzz","email":"devaymen@gmail.com"}],"bin":{"ai-token-counter":"bin/ai-token-counter.js"},"dist":{"shasum":"0e07ab920ea35fec9084778e725985b9b71119c6","tarball":"https://registry.npmjs.org/@aymenbzz/ai-token-counter/-/ai-token-counter-1.0.0.tgz","fileCount":11,"integrity":"sha512-qu9GziEdkYO9yH4FlktFtGOCARr8CYbFQSbxLu9rdahfzcunVbofJp8MR1JRK4WkuzXpawOk4reK2As458aaMQ==","signatures":[{"sig":"MEQCIELxyFkpFmWlljOP/bUkZ1I2e9oUSV8kH7J109qk2c4SAiBLRMWjP33t3vW9kWJW5dB8PDP5slnQI1FjcJbahxkjVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23248},"main":"src/cli.js","type":"module","engines":{"node":">=18"},"gitHead":"3d37e3057f168135fb0443a01fc518c33ce17821","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"aymenbzz","email":"devaymen@gmail.com"},"_npmVersion":"10.7.0","description":"Count tokens in text before sending to AI APIs (Claude, GPT, Gemini) to know cost and context usage","directories":{},"_nodeVersion":"22.2.0","dependencies":{"chalk":"^5.3.0","tiktoken":"^1.0.22","commander":"^12.1.0","gemini-token-estimator":"^0.6.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-token-counter_1.0.0_1769554487627_0.46026762624818063","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aymenbzz/ai-token-counter","version":"1.0.1","description":"Count tokens in text before sending to AI APIs (Claude, GPT, Gemini) to know cost and context usage","type":"module","main":"src/cli.js","bin":{"ai-token-counter":"bin/ai-token-counter.js"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":["ai","token","counter","openai","claude","gemini","tiktoken","cli"],"author":{"name":"aymenbz"},"license":"MIT","engines":{"node":">=18"},"dependencies":{"chalk":"^5.3.0","commander":"^12.1.0","gemini-token-estimator":"^0.6.0","tiktoken":"^1.0.22"},"_id":"@aymenbzz/ai-token-counter@1.0.1","gitHead":"f73158e04cb235772d66c308ebd51349234859d2","_nodeVersion":"22.2.0","_npmVersion":"10.7.0","dist":{"integrity":"sha512-S5qbCb+evfNDlpczQUYBhbWaY6BCwmBjSMSrW+05xnxNNA1KZkH3gMP9KS1kTKtinGjHTbS1/+B9CUvpJbTt7A==","shasum":"12da8ec717ef984a1c9941e7939ca04f70a2e87f","tarball":"https://registry.npmjs.org/@aymenbzz/ai-token-counter/-/ai-token-counter-1.0.1.tgz","fileCount":11,"unpackedSize":23268,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAjXhZq+baUOY6GzA0C6PaXYvQrGoy9e7s77NNuP5SXVAiAfkxYAx6uiWlf30tg9AT8YtdQMa1GhwKI29KXwTefI/w=="}]},"_npmUser":{"name":"aymenbzz","email":"devaymen@gmail.com"},"directories":{},"maintainers":[{"name":"aymenbzz","email":"devaymen@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-token-counter_1.0.1_1769554833699_0.6960791971776092"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-27T22:54:47.578Z","modified":"2026-01-27T23:00:34.048Z","1.0.0":"2026-01-27T22:54:47.786Z","1.0.1":"2026-01-27T23:00:33.908Z"},"author":{"name":"aymenbz"},"license":"MIT","keywords":["ai","token","counter","openai","claude","gemini","tiktoken","cli"],"description":"Count tokens in text before sending to AI APIs (Claude, GPT, Gemini) to know cost and context usage","maintainers":[{"name":"aymenbzz","email":"devaymen@gmail.com"}],"readme":"# ai-token-counter\n\nCount tokens in text before sending to AI APIs (Claude, GPT, Gemini) so you know the cost and context usage.\n\n## Why it's valuable\n\n- 💰 **Save money** - Avoid accidentally sending huge context\n- ⚠️ **Stay under limits** - Know before you hit 200k token limit\n- 📊 **Optimize prompts** - See token impact of changes\n\n## Installation\n\n```bash\nnpm install -g @aymenbzz/ai-token-counter\n```\n\nOr use with `npx`:\n\n```bash\nnpx @aymenbzz/ai-token-counter \"Your text here\"\n```\n\n## Usage\n\n### Basic usage (positional arguments)\n\n```bash\nai-token-counter \"Your text here\"\n```\n\n### From file\n\n```bash\nai-token-counter --file context.txt\n```\n\n### From stdin (pipe)\n\n```bash\ncat huge-file.md | ai-token-counter\n```\n\n### Compare multiple models\n\n```bash\nai-token-counter --compare \"Your text here\"\n```\n\n### JSON output (for scripting)\n\n```bash\nai-token-counter --format json \"Your text here\"\n```\n\n## Options\n\n- `--model <id>` - Select a specific model (default: `gpt-4o`)\n- `--compare` - Show results for multiple models side-by-side\n- `--format <pretty|json>` - Output format (default: `pretty`)\n- `--file <path>` - Read text from a file\n- `--warn-ratio <0-1>` - Warn when tokens >= limit \\* ratio (default: `0.9`)\n- `--max <tokens>` - User-defined budget warning threshold\n- `--prices <path>` - Load custom pricing from JSON file\n\n## Supported Models\n\n### OpenAI (Accurate token counting)\n\n- `gpt-4o` - GPT-4o (default)\n- `gpt-4.1` - GPT-4.1\n- `gpt-4o-mini` - GPT-4o Mini\n- `gpt-3.5-turbo` - GPT-3.5 Turbo\n\n### Anthropic Claude (Estimated token counting)\n\n- `claude-sonnet` - Claude Sonnet 4.5\n- `claude-opus` - Claude Opus 4\n\n### Google Gemini (Estimated token counting)\n\n- `gemini-1.5-pro` - Gemini 1.5 Pro\n- `gemini-2.0` - Gemini 2.0\n\n## Examples\n\n```bash\n# Basic count\n$ ai-token-counter \"Hello, world!\"\n📊 Tokens: 2\nModel: GPT-4o (OpenAI)\n💰 Input cost: $0.00001\n\n# From file with warnings\n$ ai-token-counter --file context.txt\n📊 Tokens: 15,420\nModel: GPT-4o (OpenAI)\n💰 Input cost: $0.03855\n⚠️  Warning: Near 16k limit for GPT-4o (15420/16384)\n\n# Compare models\n$ ai-token-counter --compare \"Your prompt here\"\n📊 Tokens: 4\nModel: GPT-4o (OpenAI)\n💰 Input cost: $0.00001\n\n📊 Tokens (estimate): 4\nModel: Claude Sonnet 4.5 (Anthropic)\n💰 Input cost: $0.00001\n\n📊 Tokens (estimate): 4\nModel: Gemini 1.5 Pro (Google)\n💰 Input cost: $0.00001\n\n# JSON output\n$ ai-token-counter --format json \"Hello\"\n{\n  \"tokens\": 1,\n  \"modelId\": \"gpt-4o\",\n  \"modelName\": \"GPT-4o\",\n  \"provider\": \"OpenAI\",\n  \"estimated\": false,\n  \"cost\": 0.0000025,\n  \"warnings\": []\n}\n```\n\n## Token Counting Accuracy\n\n- **OpenAI models**: Uses `tiktoken` for accurate token counting\n- **Claude models**: Uses `tiktoken`'s `cl100k_base` encoding as an estimate (labeled as \"estimate\")\n- **Gemini models**: Uses `gemini-token-estimator` for approximate counting (typically within 10%, labeled as \"estimate\")\n\n## Pricing\n\nPricing is based on current API rates (as of 2026):\n\n- **OpenAI**: [OpenAI pricing](https://platform.openai.com/docs/pricing)\n- **Anthropic**: [Claude pricing](https://platform.claude.com/docs/en/about-claude/pricing)\n- **Google**: [Gemini billing](https://ai.google.dev/gemini-api/docs/billing)\n\nYou can override pricing by providing a custom JSON file with `--prices <path>`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}