بلاگ پر واپس جائیں

لاگت کی بہتریگائیڈ

Python میں فی پروجیکٹ API خرچ ٹریک کریں اور بجٹ الرٹس حاصل کریں

ایک مختصر Python اسکرپٹ آپ کے یوزیج لاگ کو فی پروجیکٹ لاگت کی رپورٹ میں بدل دیتی ہے اور ماہانہ بجٹ کے 50، 75، 95 اور 100% پر وارننگ دیتی ہے۔

از CheapTokens Teamشائع شدہ 6 منٹ کا مطالعہ

فی پروجیکٹ خرچ رپورٹ اور بجٹ وارننگ والا ٹرمینل
اس صفحہ پر
  1. Anthropic نے کیا جاری کیا، اور آپ کیا کاپی کر سکتے ہیں
  2. لاگ: فی درخواست ایک لائن
  3. اسکرپٹ: فی پروجیکٹ لاگت اور تھریشولڈ الرٹس
  4. اسے چلائیں اور نتیجہ پڑھیں
  5. سستے ماڈلز پر ایک مہینہ کیسا لگتا ہے
  6. یہ کہاں غلط ہوتا ہے

ہر API کال کے بعد فائل میں ایک JSON لائن شامل کریں، اسے پروجیکٹ کے نام سے ٹیگ کریں، اور ایک 30 لائنوں کی Python اسکرپٹ کو اس فائل سے فی پروجیکٹ لاگت کی رپورٹ اور آپ کے ماہانہ بجٹ کے 50، 75، 95 اور 100% پر وارننگ بنانے دیں۔ یہ وہی ویو ہے جو Anthropic نے ابھی Claude Enterprise ٹیموں کو دیا، آپ کے اپنے لاگ سے بنایا گیا۔

فرض کریں ایک بیلنس ایک ایجنٹ، ایک بلاگ ڈرافٹنگ اسکرپٹ اور ایک چھوٹے سپورٹ بوٹ کو فیڈ کرتا ہے۔ مہینے کا اختتام آتا ہے، بیلنس آپ کی توقع سے کم ہے، اور کوئی چیز نہیں بتاتی کہ تینوں میں سے کس نے یہ کیا۔ یہی وہ خلا ہے جو یہ بند کرتا ہے۔

Anthropic نے کیا جاری کیا، اور آپ کیا کاپی کر سکتے ہیں#

Anthropic کا اعلان (28 اکتوبر 2026) سمارٹ رپورٹس، ایپ میں سرویز اور پول شدہ گروپ بجٹس کا احاطہ کرتا ہے، جو عام طور پر صرف Claude Enterprise پلانز پر دستیاب ہیں (source)۔ یہاں دو حصے اہم ہیں۔ ایک رپورٹ ٹیم کے کام کو ورک اسٹریمز میں گروپ کرتی ہے اور ہر ایک کا خرچ دکھاتی ہے۔ پول شدہ بجٹ ایک مشترکہ ماہانہ نمبر ہے، اور بلنگ ایڈمنز کو اس کے 50%، 75%، 95% اور 100% پر ای میل ملتی ہے۔ Anthropic مزید کہتا ہے کہ رپورٹس سرمایہ کاری کی منصوبہ بندی کے لیے ہیں، افراد کا فیصلہ کرنے کے لیے نہیں۔

اسی شکل کے لیے آپ کو انٹرپرائز پلان کی ضرورت نہیں۔ ورک اسٹریم صرف ایک لیبل ہے جو آپ منتخب کرتے ہیں، اور چار تھریشولڈز کوڈ میں ایک فہرست ہیں۔ Anthropic کی دی گئی وجہ سے، شخص کے بجائے پروجیکٹ کے لحاظ سے گروپ کریں۔

فوری جانچ

آپ کا پری پیڈ بیلنس پہلے ہی صفر پر درخواستیں روک دیتا ہے۔ 50% اور 75% پر وارننگ کیوں شامل کریں؟

جواب دکھائیں

جواب: کیونکہ صفر بہت دیر ہے: آپ بھاگتے ہوئے لوپ کو تب نوٹس کرنا چاہتے ہیں جب ابھی پیسے موجود ہوں

بیلنس ایک سخت رکاوٹ ہے، الارم نہیں۔ ابتدائی تھریشولڈز 100% پر حیرت کو نویں دن کے سوال میں بدل دیتے ہیں۔

لاگ: فی درخواست ایک لائن#

ہر چیٹ کمپلیشن رسپانس میں usage آبجیکٹ ہوتا ہے جس میں prompt_tokens اور completion_tokens ہوتے ہیں۔ رپورٹ کو بس اتنا ہی چاہیے، اور ایک پروجیکٹ لیبل جو آپ خود شامل کرتے ہیں۔ یہ ریپر درخواست بھیجتا ہے اور ماہانہ فائل میں ایک لائن شامل کرتا ہے (فائل کا نام ہر مہینے بدلتا ہے، تاکہ نیا مہینہ صفر سے شروع ہو):

python
import json, os, time
from openai import OpenAI

client = OpenAI(base_url="https://api.cheaptokens.dev/v1",
                api_key=os.environ["CHEAPTOKENS_API_KEY"])

def ask(project, model, messages):
    r = client.chat.completions.create(model=model, messages=messages)
    with open(time.strftime("usage-%Y-%m.jsonl"), "a") as f:
        f.write(json.dumps({"project": project, "model": model,
                            "prompt_tokens": r.usage.prompt_tokens,
                            "completion_tokens": r.usage.completion_tokens}) + "\n")
    return r

ask("support-bot", "zai-org/GLM-5.3-Flash",
    [{"role": "user", "content": "Where is my order?"}])

CheapTokens docs سے مکمل ماڈل آئی ڈی استعمال کریں (deepseek-ai/DeepSeek-V4-Flash-0731، zai-org/GLM-5.3-Flash)؛ قیمت کی جدولوں کے مختصر نام API قبول نہیں کرتا۔ کلید ماحول کے متغیر سے آتی ہے، کبھی فائل سے نہیں۔

ہر درخواست سے یوزیج لاگ، پروجیکٹ رپورٹ اور الرٹس تک کا بہاؤ
کیسے ایک درخواست لاگ میں لائن بنتی ہے، پھر رپورٹ اور الرٹ

اسکرپٹ: فی پروجیکٹ لاگت اور تھریشولڈ الرٹس#

اسے report.py کے طور پر محفوظ کریں۔ قیمتیں پلیس ہولڈر ہیں: موجودہ قیمتیں pricing table سے کاپی کریں (دونوں ماڈلز یہاں صرف ایک مثال قیمت شیئر کرتے ہیں تاکہ حساب پڑھنے میں آسان رہے)۔

python
import json, os, sys, time
from collections import defaultdict

LOG = time.strftime("usage-%Y-%m.jsonl")
BUDGET = float(os.environ.get("BUDGET_USD", "10"))  # example, substitute your own
STATE = LOG + ".alert"
LEVELS = [50, 75, 95, 100]
PRICES = {  # USD per 1M tokens (input, output): example, substitute current prices
    "deepseek-ai/DeepSeek-V4-Flash-0731": (1.0, 2.0),
    "zai-org/GLM-5.3-Flash": (1.0, 2.0),
}

spend = defaultdict(float)
with open(LOG) as f:
    for line in f:
        r = json.loads(line)
        p_in, p_out = PRICES[r["model"]]
        spend[r["project"]] += (r["prompt_tokens"] * p_in
                                + r["completion_tokens"] * p_out) / 1_000_000

total = sum(spend.values())
if total == 0:
    sys.exit("log is empty")

for name, usd in sorted(spend.items(), key=lambda kv: -kv[1]):
    print(f"{name:<8} ${usd:6.2f} {usd / total:5.0%}")
print(f"{'total':<8} ${total:6.2f} of ${BUDGET:.2f} ({total / BUDGET:.0%})")

last = int(open(STATE).read()) if os.path.exists(STATE) else 0
crossed = [l for l in LEVELS if total >= BUDGET * l / 100 and l > last]
if crossed:
    print(f"WARNING: budget passed {crossed[-1]}%")
    open(STATE, "w").write(str(crossed[-1]))

آخری چار لائنیں وہ حصہ ہیں جو لوگ بھول جاتے ہیں۔ چھوٹی اسٹیٹ فائل کے بغیر، اسکرپٹ مہینے کے باقی حصے میں ہر رن پر "50% پار ہو گیا" چلاتا رہے گا۔ اس کے ساتھ، ہر سطح ایک بار فائر ہوتی ہے۔

اسے چلائیں اور نتیجہ پڑھیں#

چار لائنوں کا ایک کھلونا لاگ لیں (اصل میں فی درخواست ایک لائن ہوتی ہے، یعنی ہزاروں):

text
{"project": "agent", "model": "deepseek-ai/DeepSeek-V4-Flash-0731", "prompt_tokens": 2400000, "completion_tokens": 300000}
{"project": "agent", "model": "deepseek-ai/DeepSeek-V4-Flash-0731", "prompt_tokens": 1000000, "completion_tokens": 100000}
{"project": "blog", "model": "zai-org/GLM-5.3-Flash", "prompt_tokens": 800000, "completion_tokens": 400000}
{"project": "bot", "model": "zai-org/GLM-5.3-Flash", "prompt_tokens": 500000, "completion_tokens": 100000}

مثال کی قیمتوں اور 10 کے بجٹ کے ساتھ، python report.py یہ پرنٹ کرتا ہے:

text
agent    $  4.20   65%
blog     $  1.60   25%
bot      $  0.70   11%
total    $  6.50 of $10.00 (65%)
WARNING: budget passed 50%

ایجنٹ بل کا تقریباً دو تہائی ہے، اور وارننگ 50% پر آئی، آخر میں نہیں۔ دوبارہ چلائیں اور وارننگ خاموش رہتی ہے جب تک کل 75% تک نہ پہنچ جائے۔

فی پروجیکٹ رپورٹ اور 50% وارننگ دکھاتا ٹرمینل
کھلونا لاگ پر رپورٹ آؤٹ پٹ: فی پروجیکٹ حصے اور پہلی وارننگ

اسے ہر مہینے کام کرنے کے لیے، آپ کو تین مراحل چاہیے:

قدم بہ قدم

اسے تین مراحل میں وائر کریں

ہر کال لاگ کریں

اپنی تمام کالز ask(project, model, messages) کے ذریعے روٹ کریں اور ایک مختصر، مستحکم پروجیکٹ لیبل منتخب کریں۔ مہینے کے وسط میں لیبل کا نام بدلنا ایک پروجیکٹ کو دو قطاروں میں تقسیم کر دیتا ہے۔

قیمتیں اور بجٹ مقرر کریں

pricing table سے موجودہ قیمتیں PRICES میں ڈالیں، اور اپنی حد ایکسپورٹ کریں: export BUDGET_USD=25۔

اسے شیڈول پر چلائیں

ایک گھنٹہ وار cron لائن کافی ہے: 0 * * * * cd ~/ai && python3 report.py۔ اگر آپ وارننگ خود تک پہنچانا چاہتے ہیں تو آؤٹ پٹ کو میل یا چیٹ کمانڈ پر بھیجیں۔

سستے ماڈلز پر ایک مہینہ کیسا لگتا ہے#

نمبر اس وقت کارآمد ہوتے ہیں جب وہ آپ کے نمبر ہوں۔ فرض کریں کھلونا لاگ کا ایجنٹ فی قدم اوسطاً 30,000 ان پٹ اور 2,000 آؤٹ پٹ ٹوکن، فی ٹاسک 20 قدم، دن میں دو ٹاسک استعمال کرتا ہے۔ DeepSeek-V4-Flash پر ایک قدم کی لاگت $0.00065 ہے؛ GLM-5.3-Flash پر، $0.00068۔ ایک دن 40 قدم، ایک مہینہ 1,200۔ سلائیڈرز کو اپنے ایجنٹ کے مطابق حرکت دیں:

لاگت کیلکولیٹر

ایجنٹ کا ایک دن: فی ٹاسک قدم ضرب فی دن ٹاسک

فی درخواست ان پٹ ٹوکنز: 30,000 · فی درخواست آؤٹ پٹ ٹوکنز: 2,000 · فی دن درخواستیں: 40

ماڈلفی دنفی ماہ
GLM-5.3-Flash$0.0272$0.816
DeepSeek-V4-Flash$0.026$0.78
MiniMax-M2.7$0.072$2.16

اور 1,200 قدموں پر مہینہ، ان پٹ اور آؤٹ پٹ ملا کر:

ماڈل فی درخواست 1,200 درخواستیں OpenRouter، 1,200 درخواستیں
GLM-5.3-Flash $0.00068 $0.816 $1.41
DeepSeek-V4-Flash $0.00065 $0.78 $2.86
MiniMax-M2.7 $0.0018 $2.16 $25.92

فی درخواست 30,000 ان پٹ اور 2,000 آؤٹ پٹ ٹوکنز۔ فی 1M ٹوکنز کی قیمتیں موجودہ ہیں اور ہمارے ٹیرف کے ساتھ تبدیل ہوتی ہیں؛ OpenRouter کالم اسی ورک لوڈ کے لیے حوالہ جاتی قیمتیں دکھاتا ہے۔

مجموعی طور پر، ان پٹ اور آؤٹ پٹ ملا کر، دونوں ماڈلز اس جدول میں OpenRouter کی حوالہ قیمتوں سے سستے نکلتے ہیں، کسی بھی وقت ایک قیمت اور کوئی پیک سرچارج نہیں۔ DeepSeek-V4-Flash فی جواب 32,768 آؤٹ پٹ ٹوکن اور 380K کانٹیکسٹ بھی اجازت دیتا ہے؛ GLM-5.3-Flash کا کانٹیکسٹ 390K ہے۔ جب رپورٹ دکھا دے کہ کون سا پروجیکٹ بھاری ہے، صرف اس پروجیکٹ کی model سٹرنگ بدلنا ایک لائن کی تبدیلی ہے، اور ایک بیلنس ہر ماڈل کو کور کرتا ہے۔ ایک درخواست واقعی کتنے ٹوکن استعمال کرتی ہے، how many tokens an API request uses دیکھیں؛ ایک ایجنٹ رن کو درمیان میں روکنے کے لیے، tracking AI agent token cost دیکھیں۔ قیمتیں اور ماڈلز CheapTokens models page پر ہیں۔

یہ کہاں غلط ہوتا ہے#

  • PRICES میں ایک ماڈل غائب ہے۔ اسکرپٹ KeyError کے ساتھ رک جاتا ہے جو ماڈل کا نام بتاتا ہے۔ اسے شامل کریں؛ صفر پر ڈیفالٹ نہ کریں، ورنہ پروجیکٹ مفت لگے گا۔
  • اسٹریمنگ کالز۔ آخری چنک صرف تب یوزیج لے کر آتا ہے جب آپ اس کی درخواست کریں (OpenAI SDK میں stream_options={"include_usage": True})۔ ورنہ آپ کے لاگ میں خلا رہے گا۔
  • ناکام درخواستیں۔ صرف وہ رسپانس لاگ کریں جن میں usage آبجیکٹ ہو؛ ایرر والی درخواست میں گننے کو کچھ نہیں۔
  • فی شخص رپورٹس۔ لیبل کو پروجیکٹ یا ایجنٹ کے نام تک رکھیں۔ لوگوں کے بارے میں رپورٹ غلط نتائج کی دعوت دیتی ہے۔