usage-sdk-test
v0.1.3
Published
一个 Bun/Node 服务端可用的、解耦的“积分(credits)/用量(usage)/限额(limits)”SDK(v0:预付余额、CNY、accountId 级 RPM、日/月额度按 credits)。
Readme
@chronnote/usage
一个 Bun/Node 服务端可用的、解耦的“积分(credits)/用量(usage)/限额(limits)”SDK(v0:预付余额、CNY、accountId 级 RPM、日/月额度按 credits)。
Quick Start
import { createUsageSdk, MemoryPersistenceProvider } from "usage-sdk-test";
const sdk = createUsageSdk({
persistence: new MemoryPersistenceProvider(),
plans: [
{
planId: "default",
rules: [
{
meter: "tokens.input",
when: { model: "*", provider: "*" },
unitPriceMinor: 1, // 1 分 / token(示例)
currency: "CNY",
},
{
meter: "tokens.output",
when: { model: "*", provider: "*" },
unitPriceMinor: 2,
currency: "CNY",
},
],
},
],
initialBalances: [
{ accountId: "u1", money: { currency: "CNY", amountMinor: 10_000 } },
],
});
const result = await sdk.enforce({
accountId: "u1",
planId: "default",
idempotencyKey: "req_001",
limits: { rpm: 60, dailyLimitMinor: 5000, monthlyLimitMinor: 50_000 },
events: [
{ meter: "tokens.input", quantity: 1000, dimensions: { model: "gpt-4.1", provider: "openai" } },
{ meter: "tokens.output", quantity: 300, dimensions: { model: "gpt-4.1", provider: "openai" } },
],
});
if (!result.ok) {
throw new Error(`${result.code}: ${result.message ?? ""}`);
}
console.log("cost", result.cost, "balanceAfter", result.balanceAfter);Run Example (Bun)
bun packages/usage/examples/basic.ts