npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

tensorfeed

v2.3.1

Published

JavaScript/TypeScript SDK for the TensorFeed.ai API: AI news, status, model pricing, benchmarks, premium history series, webhook watches, Vercel AI SDK + LangChain.js tool factories, and agent-payable premium routing (USDC on Base)

Readme

tensorfeed

JavaScript/TypeScript SDK for the TensorFeed.ai API.

Free endpoints (news, status, models, benchmarks, history, routing preview) need no auth. The premium tier (top-N model routing, more endpoints landing later) is paid via USDC on Base. No accounts, no API keys, no traditional payment processors.

Featured: Route Verdict

The single best model to use right now, as one signed call. Route Verdict fuses live pricing, contamination-discounted benchmark capability, real production usage, measured p95 latency probes, live incident state, and deprecation flags into one ranked decision, with an AFTA-signed receipt over the exact inputs. Instead of stitching together pricing pages, benchmark leaderboards, status dashboards, and your own latency tests, you get a current, defensible routing answer in one request.

Zero install, no key, one command (works today)

curl -s -A "tensorfeed-cc-quickstart" "https://tensorfeed.ai/api/preview/route-verdict?task=code"

Swap task for reasoning, creative, or general, or pass ?model=<id-or-name> to score a specific model. The free preview is 10 calls per day per IP, no token. Abridged real response:

{
  "verdict": {
    "rank": 1,
    "model": { "name": "Gemini 2.5 Pro", "provider": "google" },
    "pricing": { "blended": 5.625, "unit": "per 1M tokens" },
    "latency": { "measured_p95_ms": 1223, "source": "measured_probe" },
    "operational": { "ok": true, "status": "operational" },
    "composite_score": 0.8449,
    "why": "code quality 0.6498 after trust discount; corroborated by real usage (rank 5, 6.5% share, flat); measured p95 1223 ms; operational; blended $5.625 / 1M"
  },
  "rate_limit": { "limit": 10, "remaining": 9, "scope": "per IP per UTC day" },
  "upgrade": { "premium_endpoint": "/api/premium/route-verdict", "adds": ["runners_up", "AFTA-signed receipt", "filter params", "no rate limit"] }
}

The premium version (/api/premium/route-verdict, 1 credit) adds ranked runners-up, the constraint filters (max_latency_p95_ms, budget, min_quality, require_operational, exclude_deprecated), the AFTA-signed receipt, and no rate limit. It needs a token; credits come from tensorfeed.ai/developers/agent-payments.

Native SDK call

import { TensorFeed } from 'tensorfeed';

const tf = new TensorFeed();

// Free preview: the top verdict only, no token. 10 calls/day per IP.
const preview = await tf.routeVerdictPreview({ task: 'code' });
console.log(preview.verdict?.model.name, preview.verdict?.why);

// Premium: runners-up, constraint filters, and the AFTA-signed receipt.
// Needs a token (see the payment quickstart below).
const tfPaid = new TensorFeed({ token: 'YOUR_TOKEN' });
const verdict = await tfPaid.routeVerdict({ task: 'code', maxLatencyP95Ms: 1500 });
console.log(verdict.verdict, verdict.runners_up);

Pass model: '<id-or-name>' instead of task to score one model. Both methods accept exactly one of the two selectors.

The agent path (MCP)

With the @tensorfeed/mcp-server MCP server installed, an agent gets two tools: route_verdict_preview (free, the pick plus reasoning) and route_verdict (1 credit, ranked runners-up, constraint filters, and the AFTA-signed receipt it can audit).

Why it matters

Models, prices, and latency move week to week. Route Verdict is one signed call an agent can act on now and later prove why it routed the way it did, without rebuilding the comparison from scratch each time.

Install

npm install tensorfeed

Zero runtime dependencies. Uses native fetch (Node.js 18+ or any modern browser).

Free Tier

import { TensorFeed } from 'tensorfeed';

const tf = new TensorFeed();

// Latest AI news
const news = await tf.news({ category: 'research', limit: 10 });
news.articles.forEach(a => console.log(a.title));

// Live AI service status
const status = await tf.status();
status.services.forEach(s => console.log(`${s.name}: ${s.status}`));

// Is a service down?
const claude = await tf.isDown('claude');
console.log(`Claude is ${claude.isDown ? 'DOWN' : 'operational'}`);

// Model pricing and benchmarks
console.log(await tf.models());
console.log(await tf.benchmarks());

// Daily history snapshots (the moat)
console.log(await tf.history());
console.log(await tf.historySnapshot('2026-04-27', 'pricing'));

// Free routing preview (top-1, 5 calls/day per IP)
const preview = await tf.routingPreview({ task: 'code' });
console.log(preview.recommendation);

Premium Tier (paid, USDC on Base)

import { TensorFeed, PaymentRequired } from 'tensorfeed';

const tf = new TensorFeed();

// Step 1: get a 30-minute quote. senderWallet is the Base wallet you will
// send the USDC from (required); quote.wallet below is where you send it.
const quote = await tf.buyCredits({ amountUsd: 1.0, senderWallet: '0xYourBaseWallet' });
console.log(`Send ${quote.amount_usd} USDC on Base to ${quote.wallet}`);
console.log(`Memo: ${quote.memo} (expires in ${quote.ttl_seconds}s)`);

// Step 2: send the USDC tx with your wallet (manually for now)

// Step 3: confirm with the tx hash
const result = await tf.confirm({ txHash: '0xYOUR_TX_HASH', nonce: quote.memo });
console.log(`Got ${result.credits} credits, token: ${result.token}`);
// The token is auto-stored on `tf`; routing() will use it.

// Step 4: call premium endpoints
const rec = await tf.routing({ task: 'code', budget: 5.0, topN: 5 });
rec.recommendations.forEach(r => {
  console.log(`#${r.rank}: ${r.model.name} (score: ${r.composite_score.toFixed(2)})`);
});

// Custom routing weights
const ranked = await tf.routing({
  task: 'general',
  weights: { quality: 0.6, cost: 0.3, availability: 0.1, latency: 0.0 },
});

// Premium history series (1 credit each, default range = last 30 days, max 90)
const prices = await tf.pricingSeries({ model: 'Claude Opus 4.7' });
console.log(`Price moved ${prices.summary.delta_pct_blended}% over the window`);

const scores = await tf.benchmarkSeries({
  model: 'Claude Opus 4.7',
  benchmark: 'swe_bench',
});
console.log(`SWE-bench moved ${scores.summary.delta_pp} pp`);

const uptime = await tf.statusUptime({ provider: 'anthropic' });
console.log(`Anthropic uptime: ${uptime.uptime_pct}% over ${uptime.days_with_data} days`);

// Premium webhook watches (1 credit per registration, free reads)
const created = await tf.createWatch({
  spec: {
    type: 'price',
    model: 'Claude Opus 4.7',
    field: 'blended',
    op: 'lt',
    threshold: 30,
  },
  callbackUrl: 'https://agent.example.com/hook',
  secret: 'any-shared-secret', // used to sign deliveries
});
console.log(`Watch ${created.watch.id} active until ${created.watch.expires_at}`);

// When a delivery arrives, verify it:
//   const sig = req.headers['x-tensorfeed-signature']; // "sha256=<hex>"
//   const expected = 'sha256=' + crypto
//     .createHmac('sha256', 'any-shared-secret')
//     .update(rawBody)
//     .digest('hex');
//   if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) reject();

console.log(await tf.listWatches());           // all your active watches
console.log(await tf.getWatch(created.watch.id)); // fire_count, last_fired_at
await tf.deleteWatch(created.watch.id);        // remove when done

// Check remaining credits
console.log(await tf.balance());

Reusing a Token Across Sessions

// Save the token after confirm()
const token = result.token!;

// Later, in another process:
const tf = new TensorFeed({ token });
console.log(await tf.balance());
const rec = await tf.routing({ task: 'code' });

Error Handling

import { TensorFeed, PaymentRequired, RateLimited, TensorFeedError } from 'tensorfeed';

const tf = new TensorFeed({ token: 'bad_token' });
try {
  await tf.routing({ task: 'code' });
} catch (e) {
  if (e instanceof PaymentRequired) {
    // 402: token invalid, expired, or out of credits
    console.log('Need to top up:', e.payload);
  } else if (e instanceof RateLimited) {
    // 429: free preview tier rate-limited (5/day per IP)
    console.log('Hit the rate limit:', e.payload);
  } else if (e instanceof TensorFeedError) {
    console.log('API error', e.statusCode, e.payload);
  } else {
    throw e;
  }
}

Requests time out after 15 seconds by default so a stalled connection never hangs your agent. Override it per client with new TensorFeed({ timeoutMs: 30000 }). A timeout or network failure surfaces as a TensorFeedError with statusCode: 0 and payload.error set to timeout or network_error, so the TensorFeedError branch above already covers it.

API Reference

Free

| Method | Description | |--------|-------------| | tf.news({ category?, limit? }) | Latest AI news articles | | tf.status() | Real-time AI service status | | tf.statusSummary() | Lightweight status summary | | tf.models() | Model pricing and specs | | tf.benchmarks() | Benchmark scores | | tf.isDown(serviceName) | Check if a specific service is down | | tf.agentActivity() | Agent traffic metrics | | tf.history() | List of available daily snapshot dates | | tf.historySnapshot(date, type) | Read a specific snapshot | | tf.routingPreview({ task }) | Top-1 routing recommendation (5/day/IP) | | tf.health() | API health check | | tf.paymentInfo() | Wallet, pricing, supported payment flows | | tf.buyCredits({ amountUsd, senderWallet }) | Generate a 30-min payment quote | | tf.confirm({ txHash, nonce }) | Verify USDC tx, mint credit token |

Token-required

| Method | Cost | Description | |--------|------|-------------| | tf.balance() | Free | Check remaining credits | | tf.usage() | Free | Per-token call history (last 100 calls aggregated by endpoint) | | tf.routing({ task, budget, topN, weights }) | 1 credit | Top-N ranked routing with full detail | | tf.pricingSeries({ model, from?, to? }) | 1 credit | Daily price points for one model with min/max/delta summary | | tf.benchmarkSeries({ model, benchmark, from?, to? }) | 1 credit | Score evolution for a benchmark on one model, returns delta_pp | | tf.statusUptime({ provider, from?, to? }) | 1 credit | Uptime % per provider with incident days (degraded = half) | | tf.createWatch({ spec, callbackUrl, secret?, fireCap? }) | 1 credit | Register a webhook watch (price / status / digest) | | tf.createDigestWatch({ cadence, callbackUrl, secret?, fireCap? }) | 1 credit | Convenience: scheduled daily/weekly digest of pricing changes | | tf.listWatches() | Free | List all active watches owned by the current token | | tf.getWatch(id) | Free | Read one watch including fire_count and last_fired_at | | tf.deleteWatch(id) | Free | Remove an owned watch | | tf.premiumAgentsDirectory({ category?, status?, sort?, limit?, ... }) | 1 credit | Enriched directory: status, news, traffic, pricing, trending_score per agent | | tf.newsSearch({ q?, from?, to?, provider?, category?, limit? }) | 1 credit | Full-text news search with date/provider filters, relevance scoring, recency boost | | tf.costProjection({ models, inputTokensPerDay, outputTokensPerDay, horizon? }) | 1 credit | Project workload cost across 1-10 models, 4 horizons, cheapest-monthly ranking | | tf.providerDeepDive(provider) | 5 credits | One provider's full profile: status + all models + benchmarks joined + news + traffic | | tf.compareModels({ ids }) | 1 credit | Side-by-side compare of 2-5 models with normalized benchmarks + rankings | | tf.whatsNew({ days?, newsLimit? }) | 1 credit | Agent morning brief: pricing changes + incidents + top news from last 1-7 days |

Framework Tools (Vercel AI SDK, LangChain.js)

Drop TensorFeed into an agent framework as ready-made premium tools. Both adapters are separate entry points with optional peer dependencies, so the base tensorfeed install stays zero-dependency.

Vercel AI SDK:

npm install ai
import { generateText } from 'ai';
import { tensorfeedPremiumTools } from 'tensorfeed/ai';

// Async: the optional dep is loaded lazily. Pass a token to enable
// paid calls; omit it to attach guidance-only tools.
const tools = await tensorfeedPremiumTools({ token: 'YOUR_TOKEN' });

await generateText({ model, tools, prompt: 'What changed in AI today?' });

LangChain.js:

npm install @langchain/core zod
import { tensorfeedPremiumTools } from 'tensorfeed/langchain';

const tools = await tensorfeedPremiumTools({ token: 'YOUR_TOKEN' });
// pass `tools` to createReactAgent / bindTools

The catalog covers the same seven premium endpoints as the Python SDK: whats-new, full routing, compare models, cost projection, news search, provider deep dive, and status leaderboard.

Payment posture. The premium tools never move funds. Attach them with or without a token: called without spendable credits they return a short, actionable guidance string (explaining that an operator provisions credits out of band) instead of paying or throwing. There is no code path from a tool call to the wallet or any signer. Credit purchases stay an explicit, per-action operator decision, by design. This is enforced in one shared module and covered by tests, including a static guard that fails if a future change introduces an autonomous-payment path.

Wallet & Trust

The TensorFeed payment wallet is 0x549c82e6bfc54bdae9a2073744cbc2af5d1fc6d1 on Base mainnet. USDC contract: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.

Cross-check this address before sending funds at:

  • https://tensorfeed.ai/llms.txt
  • https://tensorfeed.ai/api/payment/info
  • https://github.com/RipperMercs/tensorfeed (README)
  • https://x.com/tensorfeed (bio)

If any source disagrees, do not send.

Premium Data Terms

Premium API responses are licensed for inference use only. Use of TensorFeed premium data for training, fine-tuning, evaluation, or distillation of ML models is prohibited (Section 17.1 of the Terms).

No refunds; credits do not expire

All credit purchases are final and non-refundable per Section 17.5 of the Terms. Credits never expire and are jointly redeemable on tensorfeed.ai and terminalfeed.io. The recommended pattern is to buy in small increments (for example, $1 USDC for 50 credits) until call volume is calibrated, then top up as needed.

Sanctions

Premium API access is unavailable to persons or entities subject to OFAC, EU, UK, or UN sanctions, and to residents of comprehensively sanctioned jurisdictions (Cuba, Iran, North Korea, Syria, Crimea, Donetsk, Luhansk). Inbound credit-purchase transactions are screened against the Chainalysis public sanctions API. See Section 17.9 of the Terms.

Links

License

MIT