Felo API PlatformFelo API Platform

لاگت

استعمال بڑھنے پر ماڈل لاگت قابل پیش گوئی رکھیں

ہر کام ایک OpenAI سے ہم آہنگ endpoint سے بھیجیں، اسے سب سے سستے قابل ماڈل پر روٹ کریں اور ہر جواب کے واپس کردہ ٹوکن استعمال کا لاگ رکھیں۔

وقت20 منٹسطحدرمیانہاپ ڈیٹ2026-10-29
کिसके لیےپلیٹ فارم ٹیمیںAPI پروڈکٹ مالکانانجینئرنگ لیڈز

پرامپٹ کاپی کریں

مربع بریکٹ کے فیلڈز بدلیں اور Claude Code، Codex یا ٹرمینل رسائی والے AI میں چسپاں کریں۔ یہ Felo اسکل نصب کرتا ہے، کریڈٹ سے پہلے پوچھتا ہے اور ورک فلو چلاتا ہے۔

ہماری ماڈل لاگت کا جائزہ لیں اور ان کاموں کے لیے روٹنگ منصوبہ تجویز کریں: [کاموں یا خصوصیات کی فہرست]۔

حدود: ماہانہ بجٹ [رقم]، تاخیر کا ہدف [ہدف]، معیار کی سطح [سطح]۔
کچھ تجویز کرنے سے پہلے لائیو ماڈل کیٹلاگ پڑھیں۔

تیار کریں:
1. کام -> تجویز کردہ ماڈل جدول۔
2. کون سے کام ایک درجہ نیچے جا سکتے ہیں اور معیار کا خطرہ۔
3. ہر کام اور خصوصیت کے لیے استعمال لاگ کا منصوبہ۔
4. پروڈکشن بدلنے سے پہلے کیا ناپنا ہے۔

قواعد:
- موجودہ ماڈل IDs اور قیمتیں لائیو کیٹلاگ سے پڑھیں؛ کبھی یادداشت سے نرخ نقل نہ کریں۔
- پروڈکشن کنفیگریشن نہ بدلیں اور حقیقی ٹریفک نہ بھیجیں۔
- آزمائشی کالز پر کریڈٹ خرچ کرنے سے پہلے پوچھیں۔
- رول بیک منصوبہ اور فی خصوصیت خرچ کی حد رکھیں۔
- منصوبہ ./routing-plan.md میں لکھیں اور چیٹ میں خلاصہ دیں۔

کاپی میں تنصیب کے مراحل اور حفاظتی اصول بھی شامل ہیں۔

آپ کو کیا ملتا ہے

ایک رن کی مثال آؤٹ پٹ۔ لائیو جنریشن نہیں۔

نمونہ روٹنگ منصوبہ (اقتباس)
کامموجودہتجویزخطرہ
ٹکٹ درجہ بندیمضبوط ماڈلتیز ماڈلکم
جواب کا مسودہمضبوط ماڈلمضبوط ماڈلکوئی نہیں
چینج لاگ خلاصہمضبوط ماڈلتیز ماڈلدرمیانہ

کچھ بھی بدلنے سے پہلے: ایک ہفتہ فی کام استعمال لاگ کریں اور 50 نمونہ آؤٹ پٹ پر معیار کا موازنہ کریں۔

درست کالز

ڈویلپرز کے لیے: وہی ورک فلو کوڈ کے طور پر، چلانے کی ترتیب میں۔

اصل API کالز دکھائیں
  1. تمام کام ایک endpoint سے

    ایک OpenAI سے ہم آہنگ endpoint اور ایک کلید استعمال کریں، فی فراہم کنندہ SDK نہیں۔

    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);

    مثال آؤٹ پٹ

    {
      "choices": [{ "message": { "content": "• …" } }],
      "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 }
    }
  2. کام کے مطابق ماڈل روٹ کریں

    پیچیدگی کے مطابق تیز یا مضبوط ماڈل چنیں اور پہلے بیس لائن لکھیں۔

    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,
      };
    }

    مثال آؤٹ پٹ

    {
      "model": "claude-haiku-5-5",
      "text": "• …",
      "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 }
    }
  3. استعمال پڑھیں اور لاگ کریں

    ہر جواب کا usage پڑھیں اور فیچر کے مطابق ٹوکن اور تاخیر لاگ کریں۔

    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());

    مثال آؤٹ پٹ

    {"model":"claude-haiku-5-5","kind":"summarize","promptTokens":812,"completionTokens":96,"totalTokens":908}
    { "claude-haiku-5-5": 18234, "claude-sonnet-5-5": 4201 }
  4. تمام فراہم کنندگان کے لیے ایک کلید

    کیٹلاگ ماڈل اسی Felo کلید سے بلائیں اور فراہم کنندہ انتظام کم کریں۔

    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. زندہ کیٹلاگ سے قیمتیں

    نرخ مقرر نہ کریں؛ موجودہ قیمت کیٹلاگ اور قیمت صفحے سے پڑھیں۔

    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.

    مثال آؤٹ پٹ

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

کیا شامل ہے

  • ایک endpoint اور کلید
  • کام کے مطابق تیز یا مضبوط ماڈل انتخاب
  • ہر جواب کا ٹوکن لاگ
  • قیمتیں زندہ کیٹلاگ سے، کوڈ میں مقرر نہیں

کیا نہیں کرتا

  • کم بل کی ضمانت نہیں
  • پروڈکشن ٹریفک خودکار نہیں بدلتا
  • شناخت اور قیمتیں بدلتی ہیں؛ ہمیشہ زندہ کیٹلاگ پڑھیں
  • معیار آپ کے لیے نہیں جانچتا؛ آپ کے نمونے درکار
  • بلنگ یا observability کا متبادل نہیں

سوالات

کیا بل کم ہوگا؟

دکھاتا ہے کون سے کام ایک درجہ نیچے جا سکتے ہیں لیکن بچت نمونے موازنہ اور استعمال لاگ کے بعد ہی حقیقی ہے۔

کیا خودکار ماڈل بلاتا ہے؟

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

کس ماڈل کی لاگت کم ہے کیسے پتہ چلے؟

زندہ ماڈل کیٹلاگ اور قیمت صفحہ پڑھیں؛ ورک فلو نرخ مقرر نہیں کرتا کیونکہ بدلتے ہیں۔

فراہم کنندہ پن ہو سکتا ہے؟

ہاں جب تاخیر قیمت سے اہم ہو۔ پن کرنا انتخاب ہے، retry حکمت عملی نہیں؛ اپنا fallback شامل کریں۔

کیا لاگ کریں؟

فی کال: کام، فیچر، ماڈل، prompt token، completion token، مجموعہ اور تاخیر۔ بجٹ سے پہلے فیچر کے مطابق جمع کریں۔

ایک جائزے کی لاگت کتنی ہے؟

کیٹلاگ پڑھنے سے ماڈل کال نہیں بنتی۔ آزمائشی کالز استعمال کے مطابق بل ہوتی ہیں؛ پرامپٹ پہلے منظوری مانگتا ہے۔

متعلقہ ورک فلو

اسے اپنا بنائیں

وہی ترکیب، آپ کے اصل انداز کے مطابق۔

پہلے صرف لاگ

پروڈکشن سے پہلے ایک ہفتے کا استعمال لاگ کریں پھر ڈاؤن گریڈ طے کریں۔

فی فیچر بجٹ

فی فیچر ماہانہ حد رکھیں اور عبور پر خبردار یا ڈاؤن گریڈ کریں۔

تاخیر کے لیے فراہم کنندہ پن

جب تاخیر قیمت سے اہم ہو فراہم کنندہ پن کریں اور fallback شامل کریں۔

اس ترکیب کے پیچھے کے ریفرنس صفحات اور اگلے مراحل۔