دروازهٔ LLM
دروازهای برای LLM با لایهٔ داده درونش
سه نشانی پایه، یک کلید، یک موجودی. چت، تصویر، ویدیو و مدلهای تصمیم با همان SDK که امروز استفاده میکنید؛ جستوجو، سند و اسلاید از همان اعتبار — از یکدهم قیمت رسمی ارائهدهنده.
10%
نرخ شروع در برابر قیمت رسمی API ارائهدهنده
5,000+
API در همان کاتالوگ
دروازه معمولاً یک سطح دارد. این یکی سه تا.
هر سه حساب، کلید و موجودی شما را شریکاند، اما به پرسشهای متفاوتی پاسخ میدهند و روی نشانیهای پایهٔ متفاوتی هستند. دانستن اینکه کدام را صدا میزنید تمام ماجراست.
| سطح | نشانی پایه | برای چه |
|---|---|---|
| API مدل | openapi.felo.ai/api/v1 · openapi.felo.ai/api | فراخوانی مستقیم مدل زبان، تصویر، ویدیو یا تصمیم |
| API داده | openapi.felo.ai/v1/beta | فراخوانی یک ارائهدهندهٔ داده یا جستوجوی شخص ثالث با نام |
| Felo APIs | openapi.felo.ai/v2 | گردشکارهای خود فلو: جستوجو، اداری، استخراج، دانش |
یک کلید هر سه را پوشش میدهد. شارژ، اعتبار سرویس به دلار میخرد و فراخوانی مدل، فراخوانی API داده و گردشکار فلو از همان موجودی کسر میشوند — حساب جداگانه برای هر ارائهدهنده وجود ندارد.
خواندن مستنداتشش نقطهٔ پایانی، نه یکی
هر چیزی زیر /api/v1 فراخوانی مدل است، اما نوع مدل تعیین میکند کدام نقطهٔ پایانی میتواند پاسخ دهد — و هرکدام قالب خودش را برمیگرداند.
| نقطهٔ پایانی | پروتکل | برمیگرداند |
|---|---|---|
POST /api/v1/chat/completions | OpenAI Chat Completions | جریان یا یک پاسخ |
POST /api/v1/responses | OpenAI Responses | جریان یا یک پاسخ |
POST /api/v1/messages | Anthropic Messages | جریان یا یک پاسخ |
POST /api/v1/images/generations | پوشش تصویر OpenAI | task_id برای بررسی |
POST /api/v1/videos/generations | پوشش ویدیو OpenAI | task_id برای بررسی |
POST /api/v1/decisions | طرح تصمیم فلو | پاسخهای نوعدار، بدون جریان |
سه سطح چت پیادهسازی بومیاند نه لایهٔ ترجمه: هرکدام رویدادهایش را در پروتکل خودش میفرستد، پس جریان را دقیقاً مثل امروز تجزیه میکنید.
نقطهٔ پایانی را بر پایهٔ نوع مدل انتخاب کنید، نه حدس
هر مدل در کاتالوگ یک model_kind دارد و همین نوع تعیین میکند کدام نقطهٔ پایانی میتواند آن را صدا بزند. کشفش رایگان است: کاتالوگ محلی را میخواند.
# discover before you call — free, reads the catalog
GET /api/v1/models # every kind, with channels and rates
GET /api/v1/models/{model_id} # one model, in detail
GET /api/v1/videos/models # video_generation only
GET /api/v1/decisions/models # decisions only| model_kind | نقطهٔ پایانی |
|---|---|
chat | Responses، Chat Completions یا Messages بسته به پشتیبانی مدل |
image_generation | POST /api/v1/images/generations |
video_generation | POST /api/v1/videos/generations |
decisions | POST /api/v1/decisions |
با ?provider= فقط یک ارائهدهنده را ببینید، یا با ?exclude_video_and_decisions=true همهچیز جز چت و تصویر را پنهان کنید. بودن در کاتالوگ وعده نیست: مدل ویدیو به درخواست چت پاسخ نمیدهد و API خطای model_kind_mismatch برمیگرداند.
مسیر پیشفرض، یا یک سرآیند برای انتخاب ارائهدهنده
یک مدل میتواند از چند کانال بالادست سرو شود، هرکدام با ارائهدهنده و نرخ اعلامشدهٔ خودش. بدون سرآیند، پلتفرم یکی را انتخاب میکند؛ با X-Felo-Channel انتخاب با شماست.
# first channel only — no automatic fallback
X-Felo-Channel: claude-cc
X-Felo-Channel: claude-cc,anthropic # ordered selection, not a retry list- مقدار، فهرستی مرتب از کدهای عمومی کانال از
channels[].codeمدل است که به همان ترتیبی که مینویسید بررسی میشود. - فقط گروه ارائهدهندهٔ کانال اول فراخوانی میشود و نرخ همان کانال را میپردازید.
- جابهجایی خودکار وجود ندارد. فهرست کانال یک انتخاب است، نه سیاست تلاش مجدد — اگر ارائهدهندهای از کار افتاد، از برنامهٔ خودتان با کانال دیگری دوباره بفرستید.
X-Felo-Channel روی شش نقطهٔ پایانی تولید بالا کار میکند. روی API داده و Felo APIs اعمال نمیشود: آن فراخوانیها به ارائهدهندهای میروند که در درخواست نام میبرید.
یک فراخوانی واقعاً چقدر هزینه دارد
فراخوانی مدل بر پایهٔ توکن محاسبه میشود — ورودی، خروجی و کش — با ضریب تخفیف کانال. نرخها برای خوانایی بهازای هر میلیون توکن نمایش داده میشوند، اما صورتحساب از دقت توکنی تصویر قیمت جاری استفاده میکند: درخواست کوتاه هرگز به میلیون گرد نمیشود.
- نرخ کش فقط وقتی اعمال میشود که پاسخ پروتکل استفاده از کش را گزارش کند؛ مدلی که گزارش نمیکند همه را با نرخ ورودی حساب میکند.
- جستوجوی وب که سرویس مدل خودش اجرا و گزارش میکند $0.01 برای هر جستوجو هزینه دارد.
- برخی مدلها بر پایهٔ اندازهٔ پرامپت پلهای حساب میکنند: Claude Haiku 5.5 تا پرامپت 100K توکنی، $0.10 ورودی و $0.50 خروجی بهازای هر میلیون توکن است و بالاتر از آن $0.50 و $2.50 برای کل درخواست.
- اولین شارژ $1 است. بدون اشتراک، بدون هزینهٔ هر کاربر، بدون تعهد حداقلی — کلیدی که استفاده نشود هزینهای ندارد.
فراخوانیهای API داده و گردشکارهای فلو هم از همان موجودی کسر میشوند، هرکدام بر پایهٔ اعلامشدهٔ خود: برای هر درخواست موفق، برای هر مورد برگشتی یا بر پایهٔ مصرف واقعی.
نرخها و اعتباردو محدودیت که شبیه هماند و نیستند
موجودی خالی 402 INSUFFICIENT_CREDITS برمیگرداند. فراخوانی بیش از حد سریع 429 RATE_LIMITED. انتظار دومی را حل میکند و هرگز اولی را.
| وضعیت | کد | چه کنیم |
|---|---|---|
| 401 | UNAUTHORIZED | کلید را اصلاح یا از نو بسازید |
| 402 | INSUFFICIENT_CREDITS | در صورتحساب کنسول شارژ کنید و دوباره بفرستید |
| 404 | بسته به نقطهٔ پایانی | شناسهٔ مدل، شناسهٔ کار یا مسیر را بررسی کنید |
| 429 | RATE_LIMITED | تا Retry-After صبر کنید و دوباره تلاش کنید |
| 5xx | CHAT_FAILED, SERVICE_UNAVAILABLE | با backoff نمایی و jitter دوباره تلاش کنید |
امروز فقط /v2/chat محدودیتهای سخت را مستند میکند. فراخوانی مدل ممکن است از بالادست هم محدود شود و این بهصورت 429 دیده میشود — بهجای هاردکد کردن اعداد، X-RateLimit-* و Retry-After را بخوانید. هر پاسخ یک request_id دارد و سرآیند X-Request-Id که میفرستید همانطور بازگردانده میشود، تا لاگهای شما و ما به هم بخورند.
تصویر و ویدیو در پسزمینه تمام میشوند
هر دو نقطهٔ پایانی تولید، بهجای نتیجه task_id برمیگردانند. بفرستید، بررسی کنید، بردارید — و توجه کنید: پس از ساختهشدن کار، بیشتر خطاها بهجای خطای HTTP، با 200 و وضعیت پایانی میآیند.
# submit, then poll the task
POST /api/v1/images/generations → task_id
GET /api/v1/images/generations/{id} → status, result
POST /api/v1/videos/generations → task_id
GET /api/v1/videos/generations/{id} → status, resultپیش از نتیجه، وضعیت را بخوانید: failed و interrupted هم پاسخاند و error.message دلیل را میگوید. 402 هنگام ارسال یعنی کار هرگز ساخته نشده. SuperAgent متفاوت است: stream_key برمیگرداند و رویدادها را با SSE میفرستد، پس چیزی برای بررسی نیست.
نشانی پایه را عوض کنید، کلاینت را نگه دارید
هر دو SDK بهمحض اینکه نشانی پایه به اینجا اشاره کند، بدون تغییر کار میکنند. npx feloapi-cli setup همان پیکربندی را برای Claude Code و Codex مینویسد.
# OpenAI SDK
base_url = "https://openapi.felo.ai/api/v1"
# Anthropic SDK — one level up; the SDK appends /v1/messages
base_url = "https://openapi.felo.ai/api"
# pin a provider (optional)
default_headers = {"X-Felo-Channel": "claude-cc"}شناسههای مدل بین ارائهدهندهها یکسان نیستند. پیش از عوضکردن نشانی پایه از کاتالوگ انتخاب کنید، وگرنه اولین فراخوانی 404 برمیگرداند.
نیمی که دروازه معمولاً به شما واگذار میکند
دروازهٔ LLM فراخوانی مدلها را مسیریابی میکند. اینجا همان کلید به کاتالوگی با 5,000+ API هم میرسد — پس مرحلهٔ جستوجوی عامل شما، اسلایدهایی که میسازد و سندی که دوباره میخواند از همان اعتبار محاسبه میشوند، نه از سه ارائهدهندهٔ دیگر.
- Search
- PPT Task
- SuperAgent
- Web Fetch
- X Search
- Mindmap
- Landing Page Task
- LiveDoc
- YouTube Subtitling
فراخوانیهای API داده به ارائهدهندههای نامدار زیر /v1/beta میروند — Tavily، Exa، Apollo و بقیهٔ کاتالوگ — هرکدام بر پایهٔ اعلامشدهٔ خود.
دروازه کجا تمام میشود
- جابهجایی خودکار بین کانالها وجود ندارد — منطق تلاش مجدد آگاهانه در برنامهٔ شما میماند.
- بودن در کاتالوگ سازگاری را تضمین نمیکند؛ هر نوع مدل یک سطح فراخوانی دارد.
- هیچ محدودیت نرخی در سطح پلتفرم برای فراخوانی مدل مستند نشده، اما محدودیت ارائهدهندهٔ بالادست همیشه اعمال میشود.
- اعتبار پیشپرداخت است، بازگشتپذیر نیست و برداشت نمیشود — به همان اندازه که قصد خرج دارید شارژ کنید.
شش پرسش دربارهٔ دروازهٔ LLM
دروازهٔ LLM چیست؟
یک نقطهٔ ورود پیش از بسیاری از ارائهدهندههای مدل، تا کد شما بهجای یک دوجین SDK با یک نشانی پایه، یک کلید و یک موجودی حرف بزند. دروازهٔ AI هم همین کار را میکند؛ این یکی در کنارش APIهای دادهای را هم میفروشد که یک عامل لازم دارد.
میتوانم SDK فعلی OpenAI یا Anthropic را نگه دارم؟
بله. Chat Completions و Responses شکل OpenAI را دارند و Messages بومی است. نشانیهای پایه https://openapi.felo.ai/api/v1 و https://openapi.felo.ai/api هستند — یک سطح بالاتر، چون همان SDK خودش /v1/messages را اضافه میکند.
چطور بدانم کدام مدل را صدا بزنم؟
GET /api/v1/models همهٔ نوعها را با کانالها و نرخهایشان فهرست میکند؛ مدلهای ویدیو و تصمیم فهرست جداگانه دارند. model_kind را بخوانید و نقطهٔ پایانی متناظر را صدا بزنید. بودن در فهرست تضمین نمیکند هر نقطهٔ پایانی آن مدل را بپذیرد.
اگر ارائهدهندهای از کار بیفتد جابهجایی هست؟
نه، و این آگاهانه است. فهرست کانال یک انتخاب است نه سیاست تلاش مجدد: فقط اولی فراخوانی میشود. جابهجایی کار برنامهٔ شماست، چون خطا، بودجه و جایگزینی که واقعاً میخواهید همانجا دیده میشود.
هزینه چقدر است؟
هر مدل یک نرخ فلو دارد که از یکدهم قیمت رسمی ارائهدهنده شروع میشود و کانالی که تعیین میکنید نرخ پرداختی را مشخص میکند. پیشپرداخت، صورتحساب بهازای هر فراخوانی، اولین شارژ $1، بدون اشتراک.
تصویر، ویدیو و API داده را هم میتوانم صدا بزنم؟
بله. یک کلید به مدلهای چت، تصویر، ویدیو و تصمیم و کاتالوگ 5,000+ API پشت /v1/beta میرسد — همه از همان اعتبار محاسبه میشوند.
با یک فراخوانی امتحان کنید
کلیدی بسازید، شارژ کنید و همان SDKی را که استفاده میکنید به یک نشانی پایه اشاره دهید.