Skip to main content
Her LLM yanıtı, isteğin tükettiği tokenleri bildiren bir usage nesnesi taşır. Sunra kullanımı, çağırdığınız endpoint’in semantiğiyle raporlar: bir Messages yanıtı Anthropic sözleşmesini, bir Chat Completions veya Responses yanıtı ise OpenAI sözleşmesini izler. Bu biçimler kasıtlı olarak farklıdır. Bir Chat Completions yanıtını okuyan bir OpenAI SDK’sı OpenAI semantiğini varsayar, bir Messages yanıtını okuyan bir Anthropic SDK’sı ise Anthropic semantiğini varsayar. Her endpoint, tek bir ortak biçime zorlanmak yerine kendi spesifikasyonunun vaat ettiğine sadık kalır.
/v1/messages ve /v1/responses her ikisi de input_tokens alan adını kullanır ve bu ad her ikisinde aynı anlama gelmez. Messages üzerinde yalnızca taze girdiyi ifade eder. Responses üzerinde ise önbelleğe alınmış tokenler dahil olmak üzere prompt’un tamamını ifade eder.

Messages

/v1/messages üzerinde, üç girdi kovası birbirini dışlar. Hiçbir token iki kez sayılmaz, dolayısıyla prompt toplamı bunların toplamıdır:
integer
Yalnızca taze girdi tokenleri. Her iki önbellek kovasını da hariç tutar.
integer
Bu istek tarafından önbelleğe yazılan tokenler.
integer
Bu isteğe önbellekten sunulan tokenler.
integer
Model tarafından üretilen tokenler.
integer
Üç girdi kovası artı output_tokens. Streaming olmayan yanıtlarda bulunur.
Bulunmayan veya null olan bir kova sıfır sayılır.

Örnek senaryo

Aynı 19.000 tokenlik ön ek, claude-opus-4-8 modeline iki kez gönderilir. İlk istek önbelleği yazar; ikincisi onu okur.
Soğuk istek (önbellek yazma)
Sıcak istek (önbellek okuma)
input_tokens her iki istekte de 8’de kalır, çünkü her seferinde gerçekten yeni olan girdi 8’dir. 19.349 tokenlik ön ek, oluşturma kovasından okuma kovasına geçer. Her iki isteğin toplamı da aynı 19.359 tokendir, ancak maliyetleri aynı değildir: önbellek yazmaları ve önbellek okumaları kendi token başına fiyatlarıyla ücretlendirilir; bu yüzden ayrı kovalar olarak raporlanırlar.

Chat Completions ve Responses

Bu endpoint’ler OpenAI semantiğini değiştirmeden raporlar. Prompt sayımı prompt’un tamamıdır ve önbelleğe alınmış tokenler bunun ayrıca raporlanan bir alt kümesidir.
/v1/chat/completions
prompt_tokens ile cached_tokens değerlerini toplamak çift sayıma yol açar. Bu endpoint’lerde taze girdiyi elde etmek için çıkarma yapın:
Aynı kural, input_tokens ve input_tokens_details.cached_tokens ile /v1/responses için de geçerlidir.

sunra_usage_semantics işaretçisi

Sunra’nın normalleştirdiği yanıtlar, usage içinde bir işaretçi taşır:
İşaretçi, herhangi bir tekil olaya ya da alana değil, yanıta dair bir taahhüttür. Streaming olmayan bir yanıtta kök usage nesnesinde görünür; streaming bir yanıtta ise girdi kovalarını taşıyan olay olan message_start içinde görünür. Bu değerle birlikte mevcut olduğunda, bu sayfadaki garantiler geçerlidir: üç girdi kovası birbirini dışlar ve total_tokens — bulunduğu yerde — bunların toplamı artı output_tokens’tır. Yokluğu da bir taahhüttür. Sunra yalnızca ölçtüğü yanıt biçimlerini normalleştirir. Bunun dışındaki her şey upstream sağlayıcıdan olduğu gibi iletilir ve işaretlenmeden bırakılır; işaretçi taşımayan bir yanıt, kovalarına Sunra’nın kefil olmadığı bir yanıttır. Bir yanıtın hangi yaklaşımı izlediğini tahmin etmek için sayıları incelemek yerine işaretçiyi doğrulayın. Bu alan tam da biçim koklamanın yerini almak için vardır — “kovalar prompt sayımından daha fazlasını topladığına göre birbirini dışlıyor olmalı” gibi bir sezgisel yöntem birden fazla yaklaşım tarafından karşılanır ve eninde sonunda bir yanıtı yanlış okur.
İşaretçiyi yalnızca /v1/messages yanıtları taşır. Chat Completions ve Responses, OpenAI spesifikasyonunu izler ve işaretlenmez. Değer sürümlenmiştir. Bu alanların anlamındaki kırıcı bir değişiklik yeni bir değerle yayınlanır; böylece anthropic.exclusive.v1 ile yapılan bir eşitlik kontrolü sessizce farklı bir sözleşmeyi okumaya başlamaz.

Streaming

Streaming ile yapılan bir Messages isteğinde kullanım bilgisi iki olaya yayılır. message_start girdi tarafını ve işaretçiyi taşır. Sonlandırıcı message_delta yalnızca output_tokens taşır. İşaretçiyi message_start içinde doğrulayın, ardından iki olayı olağan şekilde birleştirin — sonraki olayın kullanım bilgisini öncekinin üzerine uygulayın — böylece yukarıda belgelenen değerlere ulaşırsınız. total_tokens, streaming yanıtlarda yer almaz. Hiçbir olay hem girdi hem de çıktı tarafını bilmez, dolayısıyla akış sırasında hesaplanan herhangi bir toplam yanlış olur. Akış tamamlandığında kovaları kendiniz toplayın.

Önceki davranıştan geçiş

Sunra daha önce /v1/messages üzerinde upstream usage nesnesini olduğu gibi iletiyordu. Bazı sağlayıcıların önündeki çeviri katmanı, önbellek oluşturma tokenlerini input_tokens içine katlar; bu nedenle Anthropic sözleşmesini izleyip üç kovayı toplayan bir çağıran, önbellek oluşturma tokenlerini iki kez saymış olur.
  • Üç kovayı topluyorsanız, Anthropic sözleşmesinin tarif ettiği gibi, artık doğrusunuz. Sizin tarafınızda bir değişiklik gerekmez.
  • Eski davranışı telafi ediyorduysanızcache_creation_input_tokens değerini input_tokens içinden kendiniz çıkararak veya katlamayı başka bir şekilde tersine mühendislikle çözerek — durun. Bu düzeltme artık zaten hariç tutulmuş tokenleri çıkarır ve girdinizi olduğundan az gösterir.
  • total_tokens değerini okuyorsanız, tam sayımı raporlamaya devam eder: taze girdi, her iki önbellek kovası ve çıktı.
Değişikliği bir dağıtım tarihine değil işaretçiye bağlayın; böylece aynı kod yolu hem işaretli hem de işaretsiz yanıtlar için doğru olur.