सामग्री पर जाएँ
Runic
हिन्दी
Esc
नेविगेटखोलें⌘Jप्रीव्यू
इस पेज पर

@runic-labs/ledger

खर्च किए गए टोकनों बनाम बचाए गए टोकनों का केवल-परिशिष्ट लेखांकन।

@runic-labs/ledger शुद्ध बहीखाता है — यह कभी बजट लागू नहीं करता, कभी किसी कॉल को अस्वीकार नहीं करता, और कभी उस लागत का अनुमान नहीं लगाता जिसकी आपने रिपोर्ट नहीं की। यह एक प्रश्न का उत्तर देता है: इन निर्णयों का समाधान करने में वास्तव में कितनी लागत आई, और पुन: उपयोग से उसमें से कितना बचा?

npm install @runic-labs/ledger
pnpm add @runic-labs/ledger
yarn add @runic-labs/ledger
bun add @runic-labs/ledger

createLedger(store?)

import { createLedger, FileLedgerStore, defaultLedgerFilePath } from "@runic-labs/ledger";

const ledger = createLedger(new FileLedgerStore({ filePath: defaultLedgerFilePath() }));

यदि कोई स्टोर पास नहीं किया जाता है, तो डिफ़ॉल्ट रूप से .runic/ledger.json (या $RUNIC_HOME/ledger.json) के अंतर्गत FileLedgerStore उपयोग होता है।

PropType
recordMiss(signature, tokensSpent)?void

Logs a cache miss — the agent generated its own way and spent tokensSpent.

Typevoid
recordHit(signature)?void

Logs a cache hit, recording the same tokensSpent as the original miss for this signature.

Typevoid
summary()?LedgerSummary

Aggregated totals — see below.

TypeLedgerSummary
all()?LedgerEvent[]

The full raw event log.

TypeLedgerEvent[]
clear()?void

Removes all events.

Typevoid

LedgerSummary

interface LedgerSummary {
  totalSpent: number;
  totalSaved: number;
  hitsBySignature: Record<string, number>;
}
const summary = ledger.summary();
const totalHits = Object.values(summary.hitsBySignature).reduce((a, b) => a + b, 0);
const tokensWithoutRunic = summary.totalSpent + summary.totalSaved;
const savingsPercent = Math.round((summary.totalSaved / tokensWithoutRunic) * 100);

यही ठीक वही गणना है जिसका उपयोग benchmarks/openrouter-savings और benchmarks/reuse-sweep दोनों अपने अंतिम अंक प्रिंट करने के लिए करते हैं — बेंचमार्क देखें।

recordHit में tokensSpent आर्ग्युमेंट क्यों नहीं है

किसी हिट का मान उस सिग्नेचर के मूल मिस की लागत के बराबर परिभाषित होता है — लेजर स्वयं उसे ढूँढता है, बजाय इसके कि कॉलर पर हर हिट में उसे सही ढंग से दोहराने का भरोसा करे। यदि किसी ऐसे सिग्नेचर के लिए कोई पूर्व मिस मौजूद नहीं है जिसे किसी तरह हिट किया जा रहा है (सामान्य उपयोग में ऐसा नहीं होना चाहिए, लेकिन लेजर यह नहीं मानता कि ऐसा नहीं हो सकता), तो अनुमान लगाने के बजाय यह 0 रिकॉर्ड करता है।

स्टोरेज बैकएंड

@runic-labs/cache जैसा ही पैटर्न: परीक्षणों और अस्थायी रन के लिए MemoryLedgerStore, तथा अलग-अलग प्रक्रिया आह्वानों के बीच स्थायित्व के लिए FileLedgerStore। किसी अलग बैकएंड के लिए LedgerStore इंटरफ़ेस स्वयं लागू करें:

interface LedgerStore {
  append(event: LedgerEvent): void;
  all(): LedgerEvent[];
  clear(): void;
}

आगे

  • कैश — संबंधित सिग्नेचर-कुंजीकृत स्टोर
  • CLIrunic ledger status कमांड लाइन से इस सारांश को पढ़ता है

क्या यह पेज सहायक था?