Felo API PlatformFelo API Platform

Maliyet

Kullanım büyürken model maliyetini öngörülebilir tutun

Her görevi OpenAI uyumlu tek bir endpoint’ten geçirin, onu başarabilecek en ucuz modele yönlendirin ve her yanıtın döndürdüğü token kullanımını kaydedin.

Süre20 dakikaSeviyeOrtaGüncellendi2026-10-29
Kimler içinPlatform ekipleriAPI ürün sahipleriMühendislik liderleri

İstemi kopyalayın

Köşeli parantezli alanları değiştirip Claude Code, Codex veya terminal erişimi olan bir AI’ya yapıştırın. Felo becerisini kurar, kredi harcamadan önce sorar ve iş akışını çalıştırır.

Model harcamamızı incele ve bu görevler için bir yönlendirme planı öner: [görev veya özellik listesi].

Kısıtlar: aylık bütçe [tutar], gecikme hedefi [hedef], kalite çıtası [seviye].
Bir şey önermeden önce canlı model kataloğunu oku.

Şunları hazırla:
1. Görev -> önerilen model tablosu.
2. Hangi görevler bir kademe inebilir ve kalite riski.
3. Görev ve özellik başına kullanım günlüğü planı.
4. Üretimi değiştirmeden önce ne ölçülmeli.

Kurallar:
- Güncel model ID’lerini ve fiyatlarını canlı katalogdan oku; asla ezberden ücret alıntılama.
- Üretim yapılandırmasını değiştirme ve gerçek trafik gönderme.
- Test çağrıları için kredi harcamadan önce sor.
- Geri alma planı ve özellik başına harcama üst sınırı tut.
- Planı ./routing-plan.md dosyasına yaz ve sohbette özetle.

Kopya kurulum adımlarını ve güvenlik kurallarını da içerir.

Ne elde edersiniz

Bir çalıştırmanın örnek çıktısı. Canlı üretim değil.

Örnek yönlendirme planı (alıntı)
GörevŞu anÖneriRisk
Bilet sınıflandırgüçlü modelhızlı modeldüşük
Yanıt taslaklagüçlü modelgüçlü modelyok
Changelog özetlegüçlü modelhızlı modelorta

Herhangi bir şeyi değiştirmeden önce: bir hafta görev başına kullanımı kaydet ve 50 örnek çıktıda kaliteyi karşılaştır.

Tam çağrılar

Geliştiriciler için: aynı iş akışı kod olarak, yürütme sırasıyla.

Gerçek API çağrılarını göster
  1. Tüm görevler tek endpoint’te

    Sağlayıcı başına SDK yerine tek OpenAI uyumlu endpoint ve tek anahtar kullanın.

    routing.ts
    const BASE_URL = "https://openapi.felo.ai/api/v1";
    const headers = {
      Authorization: `Bearer ${process.env.FELO_API_KEY}`,
      "Content-Type": "application/json",
    };
    
    type Completion = {
      choices: { message: { content: string } }[];
      usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number };
    };
    
    async function chat(model: string, prompt: string): Promise<Completion> {
      const res = await fetch(`${BASE_URL}/chat/completions`, {
        method: "POST",
        headers,
        body: JSON.stringify({ model, messages: [{ role: "user", content: prompt }] }),
      });
      if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
      return res.json() as Promise<Completion>;
    }
    
    const summary = await chat(
      "claude-haiku-5-5",
      "Summarize this changelog in three bullets: …",
    );
    console.log(summary.choices[0].message.content);

    Örnek çıktı

    {
      "choices": [{ "message": { "content": "• …" } }],
      "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 }
    }
  2. Modeli göreve göre yönlendirin

    Karmaşıklığa göre hızlı veya güçlü model seçin ve önce baseline’ı yazın.

    routing.ts
    type TaskKind = "classify" | "extract" | "summarize" | "draft" | "review";
    
    const MODEL_ROUTES: Record<TaskKind, string> = {
      classify: "claude-haiku-5-5",
      extract: "claude-haiku-5-5",
      summarize: "claude-haiku-5-5",
      draft: "claude-sonnet-5-5",
      review: "claude-sonnet-5-5",
    };
    
    export async function route(kind: TaskKind, prompt: string) {
      const model = MODEL_ROUTES[kind];
      const result = await chat(model, prompt);
      return {
        model,
        text: result.choices[0].message.content,
        usage: result.usage,
      };
    }

    Örnek çıktı

    {
      "model": "claude-haiku-5-5",
      "text": "• …",
      "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 }
    }
  3. Kullanımı okuyun ve kaydedin

    Her yanıttan usage okuyun ve özelliğe göre token ile gecikmeyi kaydedin.

    routing.ts
    type UsageRecord = {
      model: string;
      kind: TaskKind;
      promptTokens: number;
      completionTokens: number;
      totalTokens: number;
    };
    
    const usageLog: UsageRecord[] = [];
    
    function logUsage(kind: TaskKind, model: string, usage: Completion["usage"]) {
      const entry: UsageRecord = {
        model,
        kind,
        promptTokens: usage.prompt_tokens,
        completionTokens: usage.completion_tokens,
        totalTokens: usage.total_tokens,
      };
      usageLog.push(entry);
      console.log(JSON.stringify(entry)); // ship this line to your metrics store
      return entry;
    }
    
    export function tokensByModel() {
      return usageLog.reduce<Record<string, number>>((totals, entry) => {
        totals[entry.model] = (totals[entry.model] ?? 0) + entry.totalTokens;
        return totals;
      }, {});
    }
    
    const result = await route("summarize", "Summarize this changelog in three bullets: …");
    logUsage("summarize", result.model, result.usage);
    console.log(tokensByModel());

    Örnek çıktı

    {"model":"claude-haiku-5-5","kind":"summarize","promptTokens":812,"completionTokens":96,"totalTokens":908}
    { "claude-haiku-5-5": 18234, "claude-sonnet-5-5": 4201 }
  4. Tüm sağlayıcılar için tek anahtar

    Katalogdaki modelleri aynı Felo anahtarıyla çağırın ve sağlayıcı yönetimini azaltın.

    routing.ts
    async function chatOnChannel(model: string, prompt: string, channel?: string) {
      const res = await fetch(`${BASE_URL}/chat/completions`, {
        method: "POST",
        headers: {
          ...headers,
          ...(channel ? { "X-Felo-Channel": channel } : {}),
        },
        body: JSON.stringify({ model, messages: [{ role: "user", content: prompt }] }),
      });
      if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
      return res.json() as Promise<Completion>;
    }
    
    // Leave `channel` undefined for the default supplier.
    export function routePinned(kind: TaskKind, prompt: string, channel?: string) {
      return chatOnChannel(MODEL_ROUTES[kind], prompt, channel);
    }
  5. Fiyatlar canlı katalogdan

    Tarife sabitlemeyin; güncel fiyatları katalog ve fiyat sayfasından okuyun.

    routing.ts
    type Catalog = {
      data: { id: string; owned_by: string; model_kind: string }[];
    };
    
    export async function chatModelIds() {
      const res = await fetch(
        `${BASE_URL}/models?exclude_video_and_decisions=true`,
        { headers },
      );
      if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
      const catalog = (await res.json()) as Catalog;
      return catalog.data
        .filter((model) => model.model_kind === "chat")
        .map((model) => model.id);
    }
    
    // Price `tokensByModel()` against https://openapi.felo.ai/pricing and
    // https://openapi.felo.ai/models. Keep the links, not the rates, in your code.

    Örnek çıktı

    ["claude-haiku-5-5", "claude-sonnet-5-5"]

Neler dahil

  • Tek endpoint ve anahtar
  • Göreve göre hızlı veya güçlü model seçimi
  • Her yanıtın token kaydı
  • Fiyatlar canlı katalogdan, kodda sabit değil

Neleri yapmaz

  • Daha düşük fatura garantisi yok
  • Üretim trafiğini otomatik değiştirmez
  • ID ve fiyatlar değişir; her zaman canlı kataloğu okuyun
  • Kaliteyi sizin için değerlendirmez; örnekleriniz gerekir
  • Faturalama veya observability yerine geçmez

Sorular

Fatura düşer mi?

Hangi görevlerin bir kademe inebileceğini gösterir, ancak tasarruf ancak örnekleri karşılaştırıp kullanımı kaydettikten sonra gerçektir.

Modelleri otomatik çağırır mı?

Yalnızca test çağrılarını onaylarsanız. Varsayılan olarak kataloğu okur ve üretime dokunmadan öneri yazar.

Hangi modelin daha ucuz olduğunu nasıl bilirim?

Canlı model kataloğunu ve fiyat sayfasını okuyun; iş akışı tarifeleri sabitlemez çünkü değişirler.

Sağlayıcı sabitlenebilir mi?

Gecikme fiyattan önemliyse evet. Sabitlemek bir seçimdir, retry stratejisi değil; kendi fallback’inizi ekleyin.

Ne kaydedilmeli?

Çağrı başına: görev, özellik, model, prompt token, completion token, toplam ve gecikme. Bütçeden önce özelliğe göre toplayın.

Bir incelemenin maliyeti nedir?

Katalog okumak model çağrısı üretmez. Test çağrıları kullanıma göre faturalanır; istem önceden onay ister.

İlgili iş akışları

Kendinize uyarlayın

Aynı tarif, gerçekte nasıl teslim ettiğinize uyarlanmış.

Önce yalnızca kayıt

Üretimden önce bir hafta kullanım kaydedin, sonra indirime karar verin.

Özellik başına bütçe

Özellik başına aylık limit koyun ve aşılınca uyarın veya düşürün.

Gecikme için sağlayıcı sabitleyin

Gecikme fiyattan önemliyse sağlayıcıyı sabitleyin ve fallback ekleyin.

Bu tarifin arkasındaki referans sayfaları ve sonraki adımlar.