Maliyet muhasebesi
Bir maliyet değeri, ancak nereden geldiğini söyleyebiliyorsanız işe yarar. Burada bir token sayısı ile ekrandaki sayı arasındaki her adım var.
Bir kez, alımda fiyatlanır
Bir span, bir model kimliği ve bir token sayısı taşıyarak geldiğinde mcpd o modeli bir fiyat kitabında arar, çağrının maliyetini hesaplar ve sonucu span'in üzerinde saklar. Okuma sırasında hiçbir şey yeniden hesaplanmaz.
Bu sayfadaki önemli karar budur. Fiyatlar değişir. Maliyet, sorgu anında o gün yüklü olan kitaptan türetilseydi, gelecek ay yapılan bir indirim geçen ayın maliyetini sessizce yeniden yazardı ve birine bildirdiğiniz sayı, kontrol etmeye gittiklerinde orada olmazdı. Alımda fiyatlamak, değeri çağrının yapıldığı anda geçerli olan oranlara sabitler. Saklanan her maliyet ayrıca onu üreten kitabın kimliğini de kaydeder, yani bir değer arkasındaki oranlara kadar izlenebilir.
Zaten bir maliyet taşıyan bir span geldiği gibi bırakılır. Sağlayıcınız size
gerçek bir değer veriyorsa ve siz onu kaydediyorsanız, mcpd sizinkini korur
ve üzerine fiyat yazmaz. is_estimated bayrağı ikisini ayırır:
mcpd'nin bir kitaptan türettiği her şey tahmini olarak işaretlenir, çünkü
öyledir.
Oranlar milyon token başınadır
Bir fiyat kitabındaki her oran, milyon token başına para birimidir; her
sağlayıcı da fiyatlarını böyle yayımlar. Bir fiyat sayfasından kopyalanan
oran kitaba olduğu gibi girer, gecenin üçünde yanlış yapılacak bir bölme
olmadan. Tek bir sayaç için aritmetik
tokens × rate ÷ 1,000,000 şeklindedir.
Maliyet çalıştırmada değil, adımda durur
Her model çağrısı kendi değerini taşır. Bir çalıştırmanın toplamı span'lerinin toplamıdır ve mcpd, bir sayacı artırmak yerine span'lerden biri her geldiğinde bu toplamı span'lerden yeniden hesaplar. Span'ler sırasız gelir, yeniden denenir ve yerinde güncellenir; artan bir toplam bu üçünün altında da kayar. Altındaki satırlarla uyuşmayan bir başlık sayısı, sayfadaki diğer her sayıya olan güveni yok eder.
- agent support_agent fail
- model chat
- tool returns_policy
- model chat
- tool returns_policy
- model chat
- tool returns_policy
The model called one tool three times and never answered. That is visible in four seconds here, and invisible in a log file.
Yukarıdaki üç model çağrısı $0.00015, $0.00018 ve $0.00021 olarak fiyatlanmıştır. Başlıktaki çalıştırma toplamı bunların toplamıdır, başka bir şey değil: araç çağrıları, bellek araması ve koruma kontrolü hiç token tüketmedi, yani maliyet taşımaz ve toplama katkı vermezler.
Sayaçlar
Bir model çağrısı tek bir token sayısı değildir. Sağlayıcılar birkaç sayacı farklı oranlarla faturalar ve bir fiyat kitabı her biri için bir oran verir.
| Oran | Neye uygulanır | Kitap onu atladığında |
|---|---|---|
input | Sıradan girdi token'ları. | Zorunlu. |
output | Sıradan yanıt token'ları. | Zorunlu. |
cache_read | Bir prompt önbelleğinden sunulan token'lar. | input oranından ücretlenir. |
cache_write | Bir prompt önbelleğine yazılan token'lar. | input oranından ücretlenir. |
cache_write_5m | Sağlayıcının TTL'leri ayrı fiyatladığı yerde, beş dakikalık önbelleğe yazmalar. | Önce cache_write, sonra input oranına düşer. |
cache_write_1h | Bir saatlik önbelleğe yazmalar. | Önce cache_write, sonra input oranına düşer. |
audio_input | Ses girdi token'ları. | input oranından ücretlenir. |
audio_output | Ses çıktı token'ları. | output oranından ücretlenir. |
reasoning | Bir sağlayıcının ayrı faturaladığı yerde, gizli akıl yürütme token'ları. |
Geri düşme yok. Sağlayıcı ayrıca ayrı bir text sayısı
bildirmediyse, büyük sağlayıcıların faturaladığı gibi çıktı toplamının
parçası olarak output oranından ücretlenirler. Aşağıya
bakın.
|
Önbellekten gelen token bir kez ücretlenir
Bir faturayı olduğundan büyük göstermenin klasik yolu, önbellekten gelen bir token'ı iki kez ücretlendirmektir: bir kez önbellek oranından, bir kez de zaten içinde bulunduğu bildirilmiş girdi toplamının parçası olarak. Bu yüzden bir sağlayıcı bir dağılım bildirdiğinde o dağılım kazanır. mcpd her sayacı kendi oranıyla fiyatlar ve yalnızca kalanı düz girdi oranından ücretlendirir.
Bir milyon girdi token'ı bildiren ve bunların dokuz yüz bini önbellekten
okunmuş bir claude-sonnet-4 çağrısı, yerleşik kitaba göre şöyle
fiyatlanır:
- 900.000 önbellek okuması, milyon başına $0.30 üzerinden $0.27 eder.
- Kalan 100.000 girdi token'ı, milyon başına $3.00 üzerinden $0.30 eder.
- Bildirilen toplamın tek başına üreteceği $3.00 yerine $0.57 girdi maliyeti.
Bir sağlayıcı açık bir text sayısı verdiğinde, o sayı doğrudan
kalan olarak kullanılır. Vermediğinde kalan, bildirilen toplamdan sayaçlanmış
her alanın çıkarılmasıdır.
Bu, adı konmaya değer tek bir boşluk bırakır. Kitabın oranını tutmadığı bir
sayaç yalnızca kalanın parçası olarak ücretlenir, yani sağlayıcı ayrıca bir
text sayısı gönderdiyse hiç ücretlenmez. Kitabınız akıl yürütme
token'larına kendi oranını vermediğinde onlar buradadır ve bir oran
tanımlamak bunu düzeltir. Görüntü token'ları her zaman buradadır, çünkü bir
kitabın verebileceği bir görüntü oranı yoktur; yani ağır çok kipli bir iş
yükünde değeri kesin değil, düşük okuyun.
Bilinmeyen bir modelin maliyeti yoktur, sıfır maliyeti değil
Kitap model için hiçbir oran tutmuyorsa, mcpd span'i hiç maliyet alanı olmadan saklar. Sıfır saklamaz.
Sıfır bir iddiadır: bu çağrı bedavaydı. Yokluk bir itiraftır: bu çağrının ne tuttuğunu bilmiyoruz. İkisi farklı kararlara götürür ve ikincisini birincisi diye bildiren bir araç bir fatura hakkında yalan söylüyordur. Aynı kural okuma yolundan da geçer: span'leri hiçbir toplam vermeyen bir çalıştırma, sıfır maliyetle değil maliyet değeri olmadan döner, yani boş bir maliyet sütunu fiyatlanmadı demektir, hiçbir zaman bedava değil.
Pratik sonucu içselleştirmeye değer: kitapta olmayan bir model her toplamda
da yoktur. Harcaması /v1/api/analytics/cost içinde görünmez ve
çalıştırmaları pozitif her min_cost süzgeci tarafından dışarıda
bırakılır. Fazla düşük görünen haftalık bir toplam genellikle sakin bir hafta
değil, çözülmeyen bir model kimliğidir.
Bir model kimliğini çözmek
Bir span'deki kimlik, istemcinizin gönderdiği şeydir ve istemciler onu süsler. Bir ağ geçidi sağlayıcısını öne ekler, bir bulut bölgesini öne ekler, bir sağlayıcı bir yayım tarihi iliştirir. Bir kitap çıplak model adlarıyla anahtarlanır, bu yüzden arama sırayla dört şey dener ve ilk isabette durur.
| Adım | Örnek |
|---|---|
| Kimliğin kendisi, harf büyüklüğü eşitlenerek | GPT-4o, gpt-4o kaydını bulur |
| Son eğik çizgiden sonraki parça | openai/gpt-4o, gpt-4o kaydını bulur |
| Bir bulut kimliğinin noktalı kuyruğu | us.anthropic.claude-sonnet-4,
claude-sonnet-4 kaydını bulur
|
| Sondaki tarihi atılmış kimlik, önekiyle veya öneksiz | openai/gpt-4o-2024-08-06, gpt-4o kaydını bulur
|
Hem -YYYY-MM-DD hem -YYYYMMDD sonekleri tanınır.
Dört adımın da tutmaması bir hata değil, olağan bir sonuçtur: yukarıdaki
gibi, maliyet yok demektir.
Birlikte gelen kitap
mcpd küçük bir yerleşik kitap taşır, böylece docker run hiç
yapılandırma olmadan gerçek değerler üretir. Adı builtin'dir,
USD üzerinden fiyatlar ve ürettiği her maliyet bu adı kaydeder.
| Model | Girdi | Çıktı | Önbellek okuma | Önbelleğe yazma, 5 dk | Önbelleğe yazma, 1 saat |
|---|---|---|---|---|---|
claude-opus-4 | 15.00 | 75.00 | 1.50 | 18.75 | 30.00 |
claude-opus-4-1 | 15.00 | 75.00 | 1.50 | 18.75 | 30.00 |
claude-opus-4-5 | 5.00 | 25.00 | 0.50 | 6.25 | 10.00 |
claude-sonnet-4 | 3.00 | 15.00 | 0.30 | 3.75 | 6.00 |
claude-sonnet-4-5 | 3.00 | 15.00 | 0.30 | 3.75 | 6.00 |
claude-haiku-4-5 | 1.00 | 5.00 | 0.10 | 1.25 | 2.00 |
claude-3-5-haiku | 0.80 | 4.00 | 0.08 | 1.00 | 1.60 |
gpt-4o | 2.50 | 10.00 | 1.25 | girdi oranından | girdi oranından |
gpt-4o-mini | 0.15 | 0.60 | 0.075 | girdi oranından | girdi oranından |
gpt-4.1 | 2.00 | 8.00 | 0.50 | girdi oranından | girdi oranından |
gpt-4.1-mini | 0.40 | 1.60 | 0.10 | girdi oranından | girdi oranından |
o3 | 2.00 | 8.00 | 0.50 | girdi oranından | girdi oranından |
o4-mini | 1.10 | 4.40 | 0.275 | girdi oranından | girdi oranından |
gemini-2.5-pro | 1.25 | 10.00 | 0.31 | girdi oranından | girdi oranından |
gemini-2.5-flash | 0.30 | 2.50 | 0.075 | girdi oranından | girdi oranından |
text-embedding-3-small | 0.02 | 0.00 | girdi oranından | girdi oranından | girdi oranından |
text-embedding-3-large | 0.13 | 0.00 | girdi oranından | girdi oranından | girdi oranından |
Milyon token başına USD; kitap, üçüncü taraf bir model kataloğuna karşı en
son denetlendiğinde bu durumdaydı ve kitap bunu kendi as_of
tarihi olarak kaydeder. Anthropic girdileri iki önbelleğe yazma oranını da
taşır, çünkü daemon bir saatlik orandan beş dakikalık orana geri düşer ve uzun
olanı atlayan bir kitap sessizce eksik faturalandırırdı. OpenAI kendi
önbelleğine yazmak için ücret almaz, bu yüzden oradaki bir önbelleğe yazma
girdi oranından faturalanır. gemini-2.5-flash ayrıca 1.00'lik
bir ses girdi oranı taşır; diğer her kayıt sesi kendi metin oranından
fiyatlar. claude-haiku-4 diye bir şey yoktur: Anthropic'in
sunduğu kimlik claude-haiku-4-5'tir ve hiçbir şeye çözülmeyen
bir kimlik tahmin edilmez, fiyatsız bırakılır.
Bunlar yayımlanmış liste fiyatlarıdır, sizin fiyatlarınız değil. Anlaşmalı oranlarınız varsa veya bu tabloda olmayan bir model çalıştırıyorsanız, mcpd'nin size gösterdiği değerler bir tahmindir ve öyle okunmalıdır. Kitap bilerek kısadır: uzun bir kitap daha çok yerde bayatlar ve hak ettiğinden güçlü bir doğruluk izlenimi verir.
Kendi kitabınızı vermenin henüz bir komut satırı seçeneği yok. Kitap sunucu
durumunun parçasıdır ve bugün onu değiştirmenin yolu, mcpd'yi bir kitaplık
olarak gömüp AppState::with_price_book çağrısına bir kitap
geçirmektir. Bir kitap; bir kimlik, bir ISO 4217 para birimi ve model
kimliğinden oranlara bir eşlemedir ve ürettiği her değer kendi kimliğiyle
damgalanır, böylece iki kitap sonradan birbirinden ayrılabilir. Bir projedeki
fiyatlar tek bir para birimini paylaşmalıdır; mcpd bir çalıştırmanın
span'lerini aritmetik olarak toplar ve para birimleri arasında dönüşüm yapmaz.
Parayı geri okumak
GET /v1/api/analytics/cost, bir pencere boyunca paranın nereye
gittiğini, hiçbir şeyi bir hesap tablosuna aktarmadan yanıtlar.
curl -s 'http://localhost:4317/v1/api/analytics/cost?from=-7d&group_by=model' | Parametre | Anlamı |
|---|---|
from, to | Pencere. RFC 3339 veya göreli kısa yazım. Varsayılan olarak şimdi biten son yedi gün. |
group_by |
Varsayılan model. Ayrıca provider,
entity_name, environment,
status, session_id, user_id,
service_name veya name.
|
bucket | 30s, 5m, 1h veya 1d.
Yalnızca toplamlar için vermeyin; yanında bir zaman serisi almak için
verin.
|
project | Hangi projenin okunacağı. Varsayılan, daemon'un varsayılan projesidir. |
para nereye gitti
# Geçen hafta para nereye gitti, modele göre.
curl -s --get http://localhost:4317/v1/api/analytics/cost \
--data-urlencode 'from=-7d' \
--data-urlencode 'group_by=model'
# Aynı hafta, günlük seri olarak; hangi gün değiştiğini görebilirsiniz.
curl -s --get http://localhost:4317/v1/api/analytics/cost \
--data-urlencode 'from=-7d' \
--data-urlencode 'group_by=model' \
--data-urlencode 'bucket=1d' import { Mcpd } from '@mcpd/sdk'
const mcpd = new Mcpd()
const spend = await mcpd.analyticsCost({
from: '-7d',
to: '-0s',
groupBy: 'model',
bucket: '1d',
})
console.log(`${spend.currency} ${spend.totalCost.toFixed(4)} over the window`)
for (const group of spend.groups) {
console.log(group.key, group.totalCost, group.inputTokens, group.outputTokens)
} from mcpd import Mcpd
mcpd = Mcpd()
spend = mcpd.analytics_cost("-7d", "-0s", group_by="model", bucket="1d")
print(f"{spend.currency} {spend.total_cost:.4f} over the window")
for group in spend.groups:
print(group.key, group.total_cost, group.input_tokens, group.output_tokens) Gruplar en büyükten başlayarak, en çok yüz satır olarak döner; kovalara ayrılmış bir seri ise en çok beş bin nokta ile sınırlıdır.
yanıt
{
"from": "2026-08-20T09:00:00Z",
"to": "2026-08-27T09:00:00Z",
"currency": "USD",
"total_cost": 12.418264,
"groups": [
{
"key": "claude-sonnet-4",
"count": 1841,
"error_count": 12,
"total_cost": 9.612055,
"input_tokens": 2903118,
"output_tokens": 214477,
"latency": { "mean": 1840.2, "max": 24193.0 }
},
{
"key": "gpt-4o-mini",
"count": 6204,
"error_count": 3,
"total_cost": 2.806209,
"input_tokens": 9114882,
"output_tokens": 388310,
"latency": { "mean": 612.4, "max": 8801.0 }
}
]
} count alanında bir incelik var. model,
provider veya entity_name ile gruplamak span'leri
okur, yani count bir model çağrısı sayısıdır. Başka bir şeyle
gruplamak çalıştırma izdüşümünü okur, yani count bir çalıştırma
sayısıdır. İkisi de işe yarar; aynı sayı değildirler ve burada yapılacak en
kolay hata birini diğeriyle karşılaştırmaktır.
Bu yanıttaki grup başına gecikme yalnızca bir ortalama ve bir en yüksek değer
taşır. Yüzdelikler, bunları pencere boyunca hesaplayan
GET /v1/api/analytics/summary çağrısından gelir.
Sırada nereye gitmeli
Maliyet, bir çalıştırma listesindeki bir sütundur ve bir soruşturma asıl
çalıştırma listesinde başlar:
Çalıştırma bulma
sayfası min_cost alanını ve harcamaya göre sıralamayı anlatır.
Değerleriniz, payload'lar fiyatlanmadan önce düşürüldüğü için yanlış
görünüyorsa, neyin kaydedileceğine karar veren
Örnekleme sayfasına
bakın. Bu sayfada adı geçen her alan
veri modeli
sayfasında listelenmiştir.