Files
MathApp/docs/model-prices.md
Zareian 2cf2d14dd4 Security re-check and load test 2026-10-04: 32 threads, data file permissions, patched deps
- 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>
2026-10-04 14:39:11 +03:30

73 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# دفترِ قیمتِ مدل‌ها (اندازه‌گیری‌شده، نه از جدولِ قیمت)
این فایل یک دفتر است: هر بار قیمت یا مدل عوض شد، **ردیفِ تازه اضافه کنید و ردیفِ قدیمی را پاک
نکنید.** هدف این است که اگر 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` با همین عددها حساب شده است.