İçeriğe geç
mcpd
daemon yok
Kaynak

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.

Trace b3d9e71a Fault
0ms 2.1s 4.2s 6.3s 8.4s
  1. agent support_agent fail
  2. model chat
  3. tool returns_policy
  4. model chat
  5. tool returns_policy
  6. model chat
  7. 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.

OranNeye uygulanırKitap 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.

ModelGirdiÇıktıÖnbellek okumaÖnbelleğe yazma, 5 dkÖnbelleğe yazma, 1 saat
claude-opus-415.0075.001.5018.7530.00
claude-opus-4-115.0075.001.5018.7530.00
claude-opus-4-55.0025.000.506.2510.00
claude-sonnet-43.0015.000.303.756.00
claude-sonnet-4-53.0015.000.303.756.00
claude-haiku-4-51.005.000.101.252.00
claude-3-5-haiku0.804.000.081.001.60
gpt-4o2.5010.001.25girdi oranındangirdi oranından
gpt-4o-mini0.150.600.075girdi oranındangirdi oranından
gpt-4.12.008.000.50girdi oranındangirdi oranından
gpt-4.1-mini0.401.600.10girdi oranındangirdi oranından
o32.008.000.50girdi oranındangirdi oranından
o4-mini1.104.400.275girdi oranındangirdi oranından
gemini-2.5-pro1.2510.000.31girdi oranındangirdi oranından
gemini-2.5-flash0.302.500.075girdi oranındangirdi oranından
text-embedding-3-small0.020.00girdi oranındangirdi oranındangirdi oranından
text-embedding-3-large0.130.00girdi oranındangirdi oranındangirdi 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'
ParametreAnlamı
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'

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.