داشبورد
| مدل | درخواست | توکن |
|---|
| زمان | کلید | مدل | وضعیت | توضیح |
|---|
مدلها
| شناسه عمومی | ارائهدهنده | مدل آپستریم | قیمت (توکن ۱M) | Fallback | سلامت | وضعیت |
|---|
اول یک ارائهدهنده بسازید، بعد مدلهای آن را اینجا تعریف کنید.
ارائهدهندگان (Providers)
| نام | نوع | Base URL | احراز هویت | مدلها | وضعیت |
|---|
سرویسهایی مثل OpenAI، Anthropic، Gemini، OpenRouter، Cloudflare و … را از دکمهٔ بالا اضافه کنید.
کلیدهای دسترسی
| نام | کلید | انقضا | مصرف توکن | مصرف درخواست | مدلها | وضعیت |
|---|
برای هر مشتری یک کلید با سقف مصرف و مدت اعتبار بسازید.
گزارش مصرف
| زمان | کلید | مدل | ارائهدهنده | وضعیت | توکن (ورود/خروج) | هزینه | زمان پاسخ | توضیح |
|---|
تنظیمات
راهنمای سامانه
- ۱ در صفحهٔ ارائهدهندگان سرویس اصلی را اضافه کنید (OpenAI، Anthropic، Gemini، OpenRouter، Cloudflare و…). چیپهای آماده Base URL و نوع احراز هویت را پر میکنند؛ فقط کلید API سرویس را وارد کنید. با «تست اتصال» از درستی تنظیمات مطمئن شوید.
- ۲ در صفحهٔ مدلها مدل تعریف کنید: «شناسهٔ عمومی» اسمی است که مشتری میفرستد (دلخواه شما) و «شناسهٔ مدل در سرویس اصلی» نام واقعی مدل است. قیمت و مدلهای جایگزین را همینجا تعیین کنید.
- ۳ در کلیدهای دسترسی برای هر مشتری یک کلید بسازید: مدت اعتبار (مثلاً پکیج ۱ ماهه)، سقف توکن/درخواست/هزینه و مدلهای مجاز. بعد از ساخت، «اطلاعات اتصال» آمادهٔ ارسال به مشتری نمایش داده میشود.
- ۴ با دکمهٔ تست در صفحهٔ مدلها، پاسخ واقعی مدل را ببینید و در گزارش مصرف استفادهٔ مشتریها را دنبال کنید.
کلید سرویسهای اصلی فقط روی سرور ذخیره میشود و هرگز برای مشتریها نمایش داده نمیشود؛ مشتری فقط کلید اختصاصی خودش (sk-ait-…) را میبیند.
سامانه همزمان دو فرمت استاندارد را سرو میکند؛ لازم نیست برای هر ابزار تنظیم جدا بسازید:
- فرمت OpenAI (ZCode، Cursor، اکثر ابزارها):
Base URL = https://دامنه-شما/v1و کلید در هدرAuthorization: Bearer - فرمت Anthropic (Claude Code و…):
Base URL = https://دامنه-شما(مسیر/v1/messagesخودکار سرو میشود) و کلید در هدرx-api-keyیاAuthorization
تبدیل فرمت در هر دو جهت و بهصورت کامل انجام میشود — پیامها، تصاویر، فراخوانی ابزار (Tool Call) و استریم SSE. یعنی کلاینتی با فرمت Anthropic میتواند به مدلی که پشتش OpenAI/Gemini است وصل شود و برعکس.
curl https://your-domain.com/v1/chat/completions \
-H "Authorization: Bearer sk-ait-..." \
-H "Content-Type: application/json" \
-d '{"model":"my-model","messages":[{"role":"user","content":"Hello"}]}'
مسیرهای موجود: POST /v1/chat/completions · POST /v1/messages · GET /v1/models · POST /v1/embeddings — همهٔ مسیرها بدون /v1 هم کار میکنند. هدر x-request-id در پاسخ برای پیگیری به پشتیبانی مفید است.
- نوع سرویس: «OpenAI سازگار» (اکثر سرویسها) یا «Anthropic». اگر سرویس شما OpenAI-compatible باشد نوع OpenAI کافی است.
- نوع احراز هویت: Bearer (رایج)،
x-api-key(آنتروپیک)، هدر سفارشی، پارامتر URL یا بدون احراز هویت. - هدرها/فیلدهای اضافی: JSON دلخواهی که به هر درخواست به آن سرویس اضافه میشود (مثلاً تنظیمات خاص سرویس).
- غیرفعال کردن یک ارائهدهنده تمام مدلهایش را فوری از سرویس خارج میکند بدون حذف تنظیمات.
- حذف ارائهدهندهای که مدل متصل دارد مجاز نیست؛ اول مدلها را حذف یا منتقل کنید.
- شناسهٔ عمومی فقط باید یکتا باشد؛ میتوانید اسم دلخواه بگذارید (مثلاً
gpt-4oکه واقعاً به Gemini وصل شود). - قیمت ورودی/خروجی بهازای هر ۱ میلیون توکن برای محاسبهٔ هزینهٔ دلاری هر کلید استفاده میشود.
- مدلهای جایگزین (Fallback): اگر این مدل خطا داد یا قرنطینه شد، بهترتیب از اینها سرویس گرفته میشود.
- آستانهٔ قرنطینه / مدت قرنطینه / حداکثر تلاش مجدد / تایماوت / RPM: رفتار هوشمند هر مدل را همینجا تنظیم کنید.
- ستون سلامت: سالم / در حال آزمون / قرنطینه. با «بازگردانی» دستی هم میتوانید مدل قرنطینهشده را برگردانید.
هر کلید یک «اشتراک» است با این محدودیتها (همگی اختیاری؛ صفر یا خالی = نامحدود):
- تاریخ انقضا — مثلاً پکیج ۱ ماهه. کلید منقضی فوری پاسخ 403 میگیرد.
- سقف توکن کل / تعداد درخواست / هزینهٔ دلاری — با رسیدن به سقف، درخواست بعدی 429 میگیرد.
- سقف توکن روزانه — هر روز از نصفشب (UTC) از نو حساب میشود.
- RPM — سقف درخواست در دقیقه؛ بیش از آن 429 با هدر Retry-After.
- مدلهای مجاز — اگر انتخاب نشود همهٔ مدلهای فعال مجازند.
- محدودیت آیپی — لیست آیپی یا بازهٔ CIDR (مثل
10.0.0.0/24).
تمدید: روی کلید (حتی منقضی) «ویرایش/تمدید» را بزنید. چیپهای «تمدید +۱ ماه/+۳ ماه/+۱ سال» اگر کلید منقضی شده از امروز و اگر فعال است از پایان اعتبار فعلی محاسبه میکنند. تیک «شروع مجدد شمارش مصرف» سهمیهٔ دورهٔ جدید را از صفر حساب میکند — مصرف دورهٔ قبل به سقف جدید اضافه نمیشود اما تاریخچهٔ کامل در گزارشها میماند. کلید و آدرس اتصال مشتری تغییر نمیکند.
- تلاش مجدد: خطاهای موقت آپستریم (429 و 5xx و تایماوت) با فاصلهٔ افزایشی تا سقف «حداکثر تلاش مجدد» مدل دوباره امتحان میشوند.
- Fallback: اگر مدل اصلی پس از تلاشها پاسخ نداد، بهترتیب از مدلهای جایگزین سرویس گرفته میشود تا پاسخ مشتری هرگز قطع نشود.
- قرنطینهٔ هوشمند (Circuit Breaker): بعد از N خطای متوالی (پیشفرض ۵)، مدل از سرویس خارج میشود و در داشبورد با هشدار قرمز نمایش داده میشود. پس از دورهٔ سکون (پیشفرض ۳۰۰ ثانیه) یک درخواست آزمایشی عبور میکند؛ اگر موفق شد مدل بهصورت خودکار برمیگردد. بازگردانی دستی هم با یک کلیک ممکن است.
- خطاهای 400/413/422 (مشکل از خود درخواست) تلاش مجدد نمیگیرند — مستقیم به مدل بعدی یا به کلاینت با توضیح برمیگردند.
هر خطا دو زبانه است (انگلیسی استاندارد + فارسی در فیلد message_fa) تا کاربر دقیقاً بداند مشکل کجاست:
| وضعیت | code | معنی | راهحل |
|---|---|---|---|
| 401 | missing/invalid_api_key | کلید ارسال نشده یا نامعتبر است | هدر Authorization یا x-api-key را با کلید sk-ait-… بفرستید |
| 403 | key_disabled | کلید غیرفعال شده | با مدیر سامانه تماس بگیرید |
| 403 | key_expired | اعتبار اشتراک تمام شده | تمدید اشتراک |
| 403 | model_not_allowed | این مدل برای کلید شما مجاز نیست | مدلهای مجاز را از لیست /v1/models ببینید |
| 403 | ip_not_allowed | آیپی شما مجاز نیست | آیپی ثابت بگیرید یا محدودیت را بردارید |
| 404 | model_not_found | مدل وجود ندارد | پیام خطا لیست مدلهای موجود را نشان میدهد |
| 429 | quota_exceeded | سهمیه (توکن/درخواست/هزینه/روزانه) پر شده | تمدید یا افزایش سقف |
| 429 | rate_limit_exceeded | تعداد درخواست در دقیقه بیش از حد | طبق هدر Retry-After چند ثانیه صبر کنید |
| 429 | model_rate_limited | مدل موقتاً در سقف نرخ خودش است | کمی بعد تلاش کنید یا مدل جایگزین |
| 502 | upstream_error/unreachable | سرویس اصلی خطا داد یا در دسترس نبود | مشکل از سرویس پشت درگاه است؛ مدیر در جریان است (قرنطینه خودکار) |
| 503 | maintenance | سامانه در حالت نگهداری است | مدتی بعد تلاش کنید |
| 503 | all_models_failed | مدل اصلی و همهٔ جایگزینها پاسخ ندادند | آخرین خطا در پیام آمده؛ مدل جایگزین تعریف کنید |
| 504 | upstream_timeout | سرویس اصلی در زمان مجاز پاسخ نداد | دوباره تلاش کنید؛ اگر تکرار شد تایماوت مدل را افزایش دهید |
| 413 | request_too_large | حجم درخواست بیش از ۱۶ مگابایت | حجم پیام/تصاویر را کم کنید |
| 500 | internal_error | خطای داخلی درگاه | مقدار x-request-id را برای پیگیری گزارش دهید |
- هر درخواست (موفق یا خطا) با زمان، کلید، مدل واقعی سرویسدهنده، وضعیت، توکن ورود/خروج، هزینهٔ دلاری، مدت پاسخ و آیپی ثبت میشود.
- علامت ≈ یعنی سرویس اصلی مصرف را گزارش نکرده و مقدار تخمینی است؛ علامت ⟐ یعنی پاسخ استریمی بوده.
- هزینه = (توکن ورود × قیمت ورودی + توکن خروج × قیمت خروجی) مدل، بر اساس قیمتی که در تنظیمات مدل وارد کردهاید.
- فیلترها: کلید، مدل، موفق/خطا، بازهٔ تاریخ؛ با صفحهبندی.
- لاگهای قدیمیتر از «مدت نگهداری» (تنظیمات) خودکار پاک میشوند.
- حساب مدیر: اولین کار بعد از نصب، تغییر رمز پیشفرض است (حداقل ۸ نویسه). رمزها بهصورت Hash (PBKDF2) ذخیره میشوند.
- عنوان سرویس و آدرس عمومی: در مودال «اطلاعات اتصال» و متن آمادهٔ مشتری استفاده میشوند.
- حالت نگهداری: تمام درخواستهای API موقتاً 503 میگیرند (برای ارتقا یا عیبیابی).
- پشتیبانگیری: «دریافت خروجی JSON» ارائهدهندگان و مدلها را ذخیره میکند؛ برای بکاپ کامل، فایل دیتابیس را کپی کنید.
- امنیت: کلیدهای API مشتریها برای قابلیت نمایش مجدد، آشکار در دیتابیس ذخیره میشوند — فایل دیتابیس و بکاپها را محرمات بدانید. سامانه را پشت HTTPS (Nginx/Caddy) منتشر کنید و دسترسی مستقیم اینترنت به پورت داخلی را نبازید.
- میتوانم اسم دلخواه برای مدل بگذارم؟ بله؛ «شناسهٔ عمومی» هر نام یکتایی میتواند باشد و mapping به مدل واقعی در سامانه انجام میشود.
- اگر سرویس اصلی در ایران فیلتر است؟ سامانه را روی سرور خارج از ایران اجرا کنید؛ کلاینتها فقط به دامنهٔ شما وصل میشوند و کلیدهای اصلی روی سرور میمانند.
- چند مدل پشتیبان میتوانم بچینم؟ به هر تعداد؛ بهترتیب انتخاب consumed میشوند تا یکی پاسخ دهد.
- استریم و Tool Call پشتیبانی میشود؟ بله، در هر دو فرمت و حتی در حالت تبدیل فرمت.
- تمدید اشتراک کلید را عوض میکند؟ نه؛ همان کلید و همان آدرس باقی میماند و مشتری متوجه چیزی نمیشود.
- اگر مصرف سرویس گزارش نشود؟ سامانه تخمین میزند (≈) تا سهمیهها همیشه قابل اعمال بمانند.