- gunicorn gthread 8 -> 32 threads per worker: each assistant stream holds a thread for the whole answer; with 3x8, about 20 concurrent asks already queued ordinary page loads for seconds (up to 23 s at 50 asks locally, 7 s at 20 asks on the live server). With 3x32, 75 concurrent asks kept page loads under 110 ms (laptop, simulated model and Qdrant) - deploy.sh: new step closes the project dir to other accounts and sets the database and backups to 0600/0700 on every release; user `nobody` on the shared server could read db.sqlite3 and every backup - requirements: python-dotenv 1.2.2, urllib3>=2.8.0 (known CVEs in the installed versions), gunicorn pinned to the server's version (was only installed by hand) - security-before-production.md: items 19-23 (file permissions, DEBUG=1 still in the systemd unit, dependencies, frontend headers, guest AI cap per shared IP) and the reproduced X-Forwarded-For spoof through the origin IP - model-prices.md: 0.183 cents per answer from 50 answers in the live load test Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7.0 KiB
دفترِ قیمتِ مدلها (اندازهگیریشده، نه از جدولِ قیمت)
این فایل یک دفتر است: هر بار قیمت یا مدل عوض شد، ردیفِ تازه اضافه کنید و ردیفِ قدیمی را پاک نکنید. هدف این است که اگر GapGPT یا OpenAI روزی قیمت را بالا برد، بشود دید قبلاً چه بوده، از کِی عوض شده، و هر عدد با چه آزمایشی به دست آمده.
همهی قیمتها به دلارِ آمریکا هستند. «سنت» یعنی یکصدمِ دلار. تبدیل به تومان در
docs/ai-cost-and-guardrails.md است، چون نرخِ دلار جدا از قیمتِ مدل عوض میشود.
مدلهایی که الان استفاده میشوند
| کار | مدل | تنظیم | از کِی |
|---|---|---|---|
| جوابِ دستیار (چت) | gpt-4.1-mini |
OPENAI_CHAT_MODEL |
۲۰۲۶-۰۹-۲۶ (پیش از آن gpt-4o-mini) |
| خواندنِ صفحهی کتاب (vision) | gpt-4.1-mini |
OPENAI_VISION_MODEL |
۲۰۲۶-۰۹-۲۰ |
| embedding برای Qdrant | text-embedding-3-small |
OPENAI_EMBEDDING_MODEL |
از ابتدا |
همه از راهِ GapGPT (OPENAI_BASE_URL) صدا زده میشوند. کلید با سرورِ زنده و تیمِ دیگر مشترک است.
قیمتِ هر توکن، همانطور که GapGPT واقعاً حساب کرد
| تاریخِ سنجش | مدل | ورودی (دلار / ۱ میلیون توکن) | خروجی (دلار / ۱ میلیون توکن) | مدرک |
|---|---|---|---|---|
| ۲۰۲۶-۰۹-۲۵/۲۶ | gpt-4.1-mini |
۰٫۴۰ | ۱٫۶۰ | ۵۴۱ فراخوانی (۱) |
| ۲۰۲۶-۰۹-۲۵/۲۶ | gpt-4o-mini |
۰٫۱۵ | ۰٫۶۰ | ۳۱۱ فراخوانی (۱) |
(۱) docs/benchmarks/2026-09-26-tutor-model/*.json: هر جواب promptTokens، completionTokens و
costUsd دارد، و costUsd همان usage.costی است که خودِ GapGPT برگرداند. در ۲۰۲۶-۱۰-۰۲ دوباره
حساب شد. برای gpt-4.1-mini، ۳۹۰ فراخوانی دقیقاً برابرِ (0.40 × ورودی + 1.60 × خروجی) / 1e6
بودند و ۱۵۱ فراخوانیِ دیگر (۲۸٪) ارزانتر، چون کشِ خودکارِ ورودی خورده بودند. هیچ فراخوانیای
گرانتر نبود. برای gpt-4o-mini، ۲۹۷ فراخوانی دقیقاً برابر بودند و ۱۴ فراخوانی ارزانتر.
یعنی برای این دو مدل در آن تاریخ، قیمتِ GapGPT همان قیمتِ رسمیِ OpenAI بود.
این را به همهی مدلها تعمیم ندهید: برای ورودِ کتاب، gemini-3.6-flash سه برابرِ gpt-4o تمام شد،
یعنی خلافِ چیزی که از جدولِ قیمت انتظار میرفت (docs/extraction-playbook.md، بخشِ ۱).
هزینهی هر کار (اندازهگیریشده)
| تاریخ | کار | مدل | هزینه | چطور اندازه گرفته شد |
|---|---|---|---|---|
| ۲۰۲۶-۰۹-۲۰ | خواندنِ یک صفحهی کتاب | gpt-4.1-mini |
۰٫۲۲ سنت | /dashboard/billing/usage پیش و پس از ۳ صفحه |
| ۲۰۲۶-۰۹-۲۰ | خواندنِ یک صفحهی کتاب | gpt-4o |
۰٫۷۷ سنت | همان |
| ۲۰۲۶-۰۹-۲۰ | خواندنِ یک صفحهی کتاب | gemini-3.6-flash |
۲٫۱۳ سنت | همان |
| ۲۰۲۶-۰۹-۲۰ | ساختِ یک سوالِ چهارگزینهای | o4-mini |
۰٫۷۷ سنت | همان |
| ۲۰۲۶-۰۹-۲۵ | یک جوابِ دستیار، پرامپتِ v3 | gpt-4o-mini |
۰٫۰۴۴ سنت | rag_model_benchmark |
| ۲۰۲۶-۰۹-۲۵ | یک جوابِ دستیار، پرامپتِ v3 | gpt-4.1-mini |
۰٫۱۱۶ سنت | همان |
| ۲۰۲۶-۰۹-۲۵ | یک جوابِ دستیار، پرامپتِ v3 | gpt-5-mini |
۰٫۱۷۱ سنت | همان |
| ۲۰۲۶-۰۹-۲۵ | یک جوابِ دستیار، پرامپتِ v3 | gpt-5.4-mini |
۰٫۲۹ سنت | همان |
| ۲۰۲۶-۰۹-۲۵ | یک جوابِ دستیار، پرامپتِ v3 | o4-mini |
۰٫۴۱ سنت | همان |
| ۲۰۲۶-۰۹-۲۶ | میانگینِ همهی جوابهای سنجش | gpt-4.1-mini |
۰٫۰۹۶ سنت | میانگینِ costUsdِ ۵۴۱ فراخوانی (۱) |
| ۲۰۲۶-۱۰-۰۱ | یک جوابِ دستیار، پرامپتِ tutor-v11-math-only، ۱۰۳ مسئلهی کتاب |
gpt-4.1-mini |
۰٫۱۶۲ سنت (دبستان ۰٫۱۲۹، دبیرستان ۰٫۲۲۵) | توکنِ ورودی تخمینی (۰٫۳۸۷ توکن به ازای هر حرف)، خروجی از جوابِ واقعی، ضربدر قیمتِ بالا |
| ۲۰۲۶-۱۰-۰۱ | یک سوالِ زنده در اپ (۱۲ سوال) | gpt-4.1-mini |
۰٫۲۲۵ سنت | فراخوانیِ واقعی |
| ۲۰۲۶-۱۰-۰۴ | یک جوابِ دستیار در لودتستِ سرورِ زنده (۵۰ جواب، استریم، سوالهای تصادفیِ بانکِ سوالِ ده پایه) | gpt-4.1-mini |
۰٫۱۸۳ سنت (میانگین: ۳٬۱۸۱ توکنِ ورودی، ۳۴۸ خروجی) | prompt_tokens/completion_tokensِ ذخیرهشده روی پیامها ضربدر قیمتِ بالا؛ داشبوردِ GapGPT خوانده نشد |
عددِ برنامهریزیِ قیمتگذاری ۰٫۲۰ سنت برای هر سوالِ دستیار است و حدودِ ۷۰٪ِ آن ورودی است.
هزینهی embedding جدا اندازه گرفته نشده است. قیمتِ رسمیِ text-embedding-3-small بسیار کمتر از
چت است، ولی این را روی GapGPT نسنجیدهایم.
وقتی قیمت عوض شد یا شک کردید
۱. هزینهی واقعیِ اپ، بیخرج: از ۲۰۲۶-۱۰-۰۱ هر جوابِ دستیار prompt_tokens و
completion_tokens را روی ai_tutor.Message ذخیره میکند. جمعِ توکنهای یک بازه را در قیمتِ
این فایل ضرب کنید (پرسوجو در docs/ai-cost-and-guardrails.md).
۲. قیمتِ امروزِ GapGPT، با چند سنت: یک سوالِ کوتاه بفرستید و usage.cost را با
(ورودی × قیمتِ ورودی + خروجی × قیمتِ خروجی) / 1e6 مقایسه کنید. اگر نخواند، قیمت عوض شده است.
موجودی را پیش و پس با /dashboard/billing/usage بسنجید (rag_model_benchmark._usage_cents)؛
این تنها عددِ قابلِ اتکاست، چون hard_limit_usd موجودی نیست.
۳. ردیفِ تازه اضافه کنید، با تاریخ، مدل، عدد و مدرک. ردیفِ قدیمی را نگه دارید. اگر قیمتِ
دستیار عوض شد، قیمتِ بستهها (subscription.0010) را هم دوباره بسنجید: سهمِ هزینه از درآمدِ هر
بسته در docs/ai-cost-and-guardrails.md با همین عددها حساب شده است.