تخطَّ إلى المحتوى
21/30الفصل 21 من 30

تسعير Multimodal: ما الذي تُحاسَب عليه الصور والصوت والفيديو فعلاً

ثلاثة نماذج تعطي تكلفة تختلف 5.5× للصور الـ500 نفسها، والأرخص يتبدّل بمجرد تغيير الحجم.

في هذه الصفحة

إليك مهمة واحدة، بثلاث طرق تسعير: وصف خمسمئة صورة منتجات، بتعليق قصير واحد لكل صورة. الصور نفسها، والتعليمة نفسها، وطول الإجابة نفسه. الشيء الوحيد الذي يتغير هو النموذج الذي يقرأها.

الصورةgpt-5.6-lunagemini-3.1-flash-liteclaude-haiku-4.5
800 × 600$0.0848$0.1638$0.4380
1024 × 768$0.1200$0.1638$0.6370
1280 × 960$0.1718$0.1638$0.9010
1600 × 1200$0.2558$0.1638$0.9010
4000 × 3000$0.3220$0.1638$0.9010

هناك ثلاثة أمور في هذا الجدول تستحق التوقف عندها.

النموذج الأرخص يتغير بين الصف الثالث والرابع، في المهمة نفسها، لأن شخصاً ما غيّر حجم الصور. اطلب فقرة بدلاً من تعليق، فتتحرك نقطة التقاطع من جديد: عند 1280 × 960 يكون الفائز Gemini لتعليق من أربعين token، وOpenAI لفقرة من أربعمئة token.

عمود Gemini لا يتحرك إطلاقاً في أي صف: صورة 4000 \u00d7 3000 تكلّفه بالضبط ما تكلّفه صورة 640 \u00d7 480. صورة 4000 × 3000 تكلّفه بالضبط ما تكلّفه صورة 640 × 480. هذا ليس سقفاً. إنه نتيجة لطريقة العد، ويعني أن أكثر تحسين تكلفة شيوعاً في هذا المجال — تصغير الصورة قبل رفعها — يعطي العائد التالي:

image tokens، 4000 × 3000 → 800 × 600تكلفة التشغيلالتوفير
gpt-5.6-luna2,942 → 570$0.3220 → $0.084873.7 %
claude-haiku-4.51,564 → 638$0.9010 → $0.438051.4 %
gemini-3.1-flash-lite1,032 → 1,032$0.1638 → $0.16380.0 %

لا يوجد رقم من هذه الأرقام كسعر ينشره المورّد. كان لا بد من حساب الثلاثة جميعاً، من ثلاث قواعد مختلفة، لأن الصورة ليست وحدة قابلة للفوترة في أي مكان: تُحوَّل أولاً إلى tokens، وفق حساب مكتوب في ثلاثة مواضع غير متوافقة.

بنى الفصل 16 فاتورة النص وتوقف حيث يتوقف النص. هذا الفصل هو بقية الفاتورة: الصور، والكلام، والتفريغ، والفيديو، والحوسبة الخام، وهي مجتمعة تُفوَّتر بثماني وحدات مختلفة، مع طريقة لمقارنة أشياء لا تُباع بالمقياس نفسه.

عرض التفاصيل

ما يحتاجه هذا الفصل من الفصول السابقة.

  • بنى الفصل 7 الـtokenizer والوحدة. كل ما هنا محاولة لتحويل شيء ليس نصاً إلى تلك الوحدة.
  • أثبت الفصل 8 ما يستهلكه النموذج: ليس رموزاً، بل متجهات في فضاء embedding. لهذا يمكن تسعير صورة بـtokens أصلاً.
  • بنى الفصل 16 الدالة computeCost، وشرائح أسعارها، وخمس سلال token الخاصة بها. هذا الفصل يوسّع تلك الدالة بدلاً من استبدالها.
  • قدّم الفصل 11 LoRA كتقنية fine-tuning، وسعّره الفصل 20 كقرار ميزانية. هنا يظهر على نموذج ليس نموذج لغة.

لا tensors، وفق قاعدة الفصل 14: هذا فصل تعرفة وتحويلات ومحاسبة، لذا فهو TypeScript.

يتلقى transformer تسلسلاً من المتجهات. لا رأي له في مصدرها. في الفصل 8 أطعمناه embeddings مستخرجة من معرّف token؛ لا شيء في البنية يفرض عملية lookup هذه.

إذن: اقطع الصورة إلى مربعات ثابتة، وافرد كل مربع إلى قائمة أرقام، ومرّر كل قائمة عبر طبقة خطية متعلّمة واحدة للحصول على متجه بعرض النموذج. رقعة 32 × 32 من بكسلات اللون هي 32×32×3=307232 \times 32 \times 3 = 3072 أرقام؛ والإسقاط ERd×3072E \in \mathbb{R}^{d \times 3072} يحوّلها إلى متجه ذي dd أبعاد، بالشكل نفسه تماماً الذي يصل به text token. هذا كل شيء، وهو ما تقوله الورقة في عنوانها: الصورة تساوي 16 × 16 كلمة.1 أضف ترميزاً موضعياً حتى يعرف النموذج أي مربع كان في أي مكان، وامزج النتائج مع text embeddings، فيصبح التسلسل الذي يقرأه النموذج جزءاً صورة وجزءاً جملة.

حوّلت ثلاث أوراق ذلك إلى منتج. درّب CLIP مُرمِّز صور ومُرمِّز نصوص على الاتفاق، باستخدام أربعمئة مليون زوج مجروف من الويب، وهناك توقفت فكرة أن البكسلات والكلمات يمكنها مشاركة فضاء عن كونها فرضية.2 ثبّت Flamingo مُرمِّز رؤية مجمّداً على نموذج لغة مجمّد مع بضع طبقات وصل مدرّبة.3 وأظهر LLaVA أن الجسر يمكن أن يكون إسقاطاً خطياً واحداً، وأن اتباع التعليمات يمكن تعليمه ببيانات مولّدة، وهذا سبب أن كل نموذج رؤية-لغة مفتوح منذ ذلك الحين يبدو تقريباً بالشكل نفسه.4

الأثر على فاتورتك مباشر وغير مبهر: الرقع مواقع في التسلسل، إذن هي input tokens، إذن تدفع ثمنها بسعر الإدخال. كم عددها؟ هذا حساب، وكل مزوّد ينفذه بطريقة مختلفة.

ثلاث قواعد، كلها منشورة، ولا واحدة مثل الأخرى

رابط إلى القسم: ثلاث قواعد، كلها منشورة، ولا واحدة مثل الأخرى

كل قاعدة أدناه منفذة من وثائق المزوّد نفسه ومراجَعة مقابل الأمثلة المحلولة في الوثائق نفسها.

يغطي OpenAI الصورة برقع 32 × 32 ويضرب العدد في عامل خاص بكل نموذج. إذا تجاوز عدد الرقع الميزانية المخصصة لذلك النموذج ومستوى التفاصيل، تُصغَّر الصورة حتى تلائمها:

patches=w32×h32,shrink=322budgetwh\text{patches} = \left\lceil \frac{w}{32} \right\rceil \times \left\lceil \frac{h}{32} \right\rceil, \qquad \text{shrink} = \sqrt{\frac{32^2 \cdot \text{budget}}{w \cdot h}}

يغطي Anthropic الصورة برقع 28 × 28، token بصري واحد لكل رقعة، ويضع سقفاً للحافة الطويلة وعدد الـtokens معاً — 1,568 بكسل و1,568 token في نماذج الفئة القياسية، و2,576 و4,784 في فئة الدقة العالية. الصور الضخمة تُصغَّر إلى أكبر حجم يلائم القيدين.5

لا يعدّ Google البكسلات إطلاقاً. الصورة التي لا يتجاوز كلا ضلعيها 384 بكسل تكلّف 258 token ثابتة. أي شيء أكبر يُقطع إلى tiles من 258 token لكل tile، وتأتي شبكة الـtile من وحدة قص min(w,h)/1.5\lfloor \min(w,h) / 1.5 \rfloor.6

imagetokens.tsTS
export function openaiImageTokens(
  w: number, h: number,
  { maxDim, patchBudget, multiplier }: { maxDim: number; patchBudget: number; multiplier: number },
) {
  const fit = Math.min(1, maxDim / Math.max(w, h));      // never enlarges
  w = Math.floor(w * fit); h = Math.floor(h * fit);
  let patches = Math.ceil(w / 32) * Math.ceil(h / 32);   
  if (patches > patchBudget) {
    const s = Math.sqrt((32 * 32 * patchBudget) / (w * h));
    const adj = s * Math.min(
      Math.floor((w * s) / 32) / ((w * s) / 32),
      Math.floor((h * s) / 32) / ((h * s) / 32));
    patches = Math.ceil(Math.floor(w * adj) / 32) * Math.ceil(Math.floor(h * adj) / 32);
  }
  return Math.ceil(patches * multiplier);                
}

export function anthropicVisualTokens(
  w: number, h: number,
  { maxLongEdge, maxTokens }: { maxLongEdge: number; maxTokens: number },
) {
  const tok = (a: number, b: number) => Math.ceil(a / 28) * Math.ceil(b / 28);
  const long = Math.max(w, h), short = Math.min(w, h);
  for (let L = Math.min(long, maxLongEdge); L >= 1; L--) {     
    const t = tok(L, Math.round((short * L) / long));
    if (t <= maxTokens) return t;                              
  }
  return 0;
}

export function geminiImageTokens(w: number, h: number) {
  if (w <= 384 && h <= 384) return 258;
  const crop = Math.floor(Math.min(w, h) / 1.5);               
  return Math.ceil(w / crop) * Math.ceil(h / crop) * 258;      
}

شغّل كل قاعدة على الأرقام التي يطبعها مورّدها:

three implementations against three documentationsTEXT
OpenAI, gpt-5.4 at detail:high (2048 px, 2,500 patches, 1.2x)
  1024x1024 -> 1024 patches -> 1229 tokens   doc says 1229   MATCH
  2048x2048 -> 2500 patches -> 3000 tokens   doc says 3000   MATCH

Anthropic, the published table (one tier per row shown)
  200x200    std   64 @ 200x200     doc   64, not resized    OK
  1000x1000  std 1296 @ 1000x1000   doc 1296, not resized    OK
  1092x1092  std 1521 @ 1092x1092   doc 1521, not resized    OK
  1920x1080  std 1560 @ 1456x819    doc 1560, 1456x819       OK
  2000x1500  std 1564 @ 1269x952    doc 1564, 1269x952       OK
  3840x2160  hi  4784 @ 2576x1449   doc 4784, 2576x1449      OK

Google, the worked example
  960x540 -> crop 360 -> 3 x 2 = 6 tiles     doc says 6      MATCH

تُطبع تسع مطابقات؛ والتشغيل الكامل يفحص خمس عشرة، لأن جدول Anthropic يعطي الفئتين لكل الأحجام الستة. أصبحت القواعد الآن لديك لتشغيلها على أي صورة تمتلكها، وهذا هو المقصود: هذه هي الدوال الثلاث الوحيدة في هذا الفصل التي لا يمكنك الحصول عليها من صفحة أسعار.

مرّر صورة 4:3 نفسها عبر الثلاثة بستة أحجام:

الحجمOpenAI، highAnthropic، قياسيAnthropic، دقة عاليةGemini
384 × 288130154154258
640 × 4803604144141,032
800 × 6005706386381,032
1600 × 12002,2801,5642,4941,032
3200 × 24002,9421,5644,7401,032
4000 × 30002,9421,5644,7401,032

اقرأ العمود الأخير نزولاً. بمجرد أن تتجاوز الصورة 384 بكسل لا يتغير الرقم مرة أخرى، وهذا ليس مصادفة ولا سقفاً. أعد إدخال وحدة القص في معادلة الـtile، لصورة عرضها لا يقل عن ارتفاعها:

tiles=wh/1.5×hh/1.51.5wh×2\text{tiles} = \left\lceil \frac{w}{\lfloor h/1.5 \rfloor} \right\rceil \times \left\lceil \frac{h}{\lfloor h/1.5 \rfloor} \right\rceil \approx \left\lceil \frac{1.5\,w}{h} \right\rceil \times 2

يلغي الحجم نفسه. image tokens في Google تعتمد على نسبة العرض إلى الارتفاع ولا شيء غيرها. صورة 4:3 تساوي أربعة tiles سواء كانت مصغّرة أو ملصقاً كبيراً. هذه الحقيقة الجبرية الواحدة هي التفسير الكامل للصفر في جدول التوفير أعلاه، ولا تذكرها أي صفحة أسعار في أي مكان.

أما العمودان الآخران فيقفان عند سقف، لكن عند ارتفاعات مختلفة ولأسباب مختلفة — Anthropic عند سقف token معلن، وOpenAI عند ميزانية رقع بعد حد بكسلات — ولهذا تتقاطع المنحنيات الثلاثة عند أحجام مختلفة.

والآن اكسرها. الطريقة البديهية لإنفاق أقل على نموذج رؤية هي طلب تفاصيل أقل، لذا أرسل detail: "low":

gpt-5.4, the same photograph, two detail levelsTEXT
1600x1200   low = 2280   high = 2280   ratio 1.00
3200x2400   low = 3687   high = 2942   ratio 1.25

طلب تفاصيل أقل كلّف 25 % أكثر. هذه ليست علة، وOpenAI يقول ذلك في سطر واحد من جدول التحجيم: في عائلة النماذج تلك، يستخدم low حد 2048 بكسل مع ميزانية 6,144 رقعة، بينما يستخدم high حد البكسلات نفسه مع ميزانية 2,500 رقعة، «لذا يمكنه استخدام tokens أكثر من high».7 الكلمة low تسمّي إعداد دقة، لا سعراً: في اثنتين من عائلات النماذج الخمس الموثقة لا تشتري أي توفير إطلاقاً، وفي واحدة من هاتين الاثنتين تكلّف أكثر.

كل ما سبق كان عن نموذج يقرأ صورة. صنع صورة يعمل بآلية لا تحتوي tokens إطلاقاً، ولهذا السبب يُباع بالصورة لا بالكلمة.

صنع صورة: السعر لكل صورة هو سعر لكل token

رابط إلى القسم: صنع صورة: السعر لكل صورة هو سعر لكل token

ينشر المورّدون توليد الصور كسعر لكل صورة. لكنه ليس كذلك. تصدر نماذج GPT Image image tokens متخصصة يعتمد عددها على الحجم والجودة المطلوبين؛ اضرب الأعداد المنشورة في معدل image output المنشور لـGPT Image 1، وهو $40 لكل مليون، وقارنها بأسعار كل صورة في الصفحة نفسها:

الجودة1024 × 10241024 × 15361536 × 1024
منخفضة272 tok → $0.0109 ($0.011)408 tok → $0.0163 ($0.016)400 tok → $0.0160 ($0.016)
متوسطة1,056 tok → $0.0422 ($0.042)1,584 tok → $0.0634 ($0.063)1,568 tok → $0.0627 ($0.063)
عالية4,160 tok → $0.1664 ($0.167)6,240 tok → $0.2496 ($0.25)6,208 tok → $0.2483 ($0.25)

تسعة أرقام مشتقة مقابل تسعة منشورة، وكل زوج يتفق ضمن $0.002.11 وGoogle أكثر صراحة حتى من ذلك، إذ يجري التحويل لك على صفحة الأسعار نفسها: image output بسعر $60 لكل مليون tokens، و«الصور الناتجة عند 1K (1024x1024px) تستهلك 1120 token وتكافئ $0.067 لكل صورة».12

إذن سعر كل صورة هو سعر كل token بعد طي العدد داخله. وهذا مقبول، لكنه يخفي شيئاً. خذ جدول الجيل الحالي واقسم عكسياً:

gpt-image-2, published price -> implied output tokens at $30/MTEXT
quality   1024x1024            1024x1536
low       $0.006 -> 200 tok    $0.005 -> 167 tok
medium    $0.053 -> 1767 tok   $0.041 -> 1367 tok
high      $0.211 -> 7033 tok   $0.165 -> 5500 tok

الصورة الأكبر هي الأرخص في كل جودة. لوحة 1024 × 1536 فيها بكسلات أكثر بنسبة 50 % من 1024 × 1024، وتكلّف tokens أقل بنسبة 23 % عند الجودة المتوسطة. تنبّه OpenAI إلى ذلك في جملة قد تتجاوزها — «الدقة غير المربعة الأكبر قد تنتج أحياناً output tokens أقل من دقة أصغر أو مربعة عند إعداد الجودة نفسه» — وفي جيل النموذج السابق كان الأمر بالعكس، إذ كان العمودي يكلّف 50 % أكثر من المربع.11 كل قيمة افتراضية لـ1024x1024 كُتبت قبل ذلك التغيير أصبحت الآن الخيار المكلف.

الصوت، مفوتر بالثانية والحرف والـtoken

رابط إلى القسم: الصوت، مفوتر بالثانية والحرف والـtoken

اطلب من ثلاثة منتجات نطق الأحرف الـ519 نفسها — نحو 38 ثانية من الصوت — فتحصل على ثلاثة أنظمة وحدات من مورّدين اثنين:

النموذجالوحدةالسعر
tts-1لكل حرف$15.00 لكل مليون حرف → $0.007785
tts-1-hdلكل حرف$30.00 لكل مليون حرف → $0.015570
gemini-3.1-flash-ttsلكل audio token، 25 في الثانية$20.00 لكل مليون → $0.019319

المورّد نفسه يبيع الوحدتين: tts-1 من OpenAI مسعّر لكل مليون حرف، بينما gpt-4o-mini-tts مسعّر لكل مليون tokens، $0.60 داخلاً و$12.00 خارجاً.13 لذا فإن «أرخص text-to-speech» ليس سؤالاً له إجابة حتى تقول ما الذي ستنطقه.

والوحدتان عمياءان عن أشياء متعاكسة. السعر لكل حرف لا يرى المدة: اختر صوتاً بطيئاً ومتأنياً، أو أضف وقفات، ولا تتحرك الفاتورة بينما يصبح الصوت أطول. السعر لكل ثانية لا يرى المحتوى: ثلاثون ثانية تكلف الشيء نفسه سواء كانت فقرة تقنية كثيفة أو شخصاً يعد إلى عشرة. غيّر الصوت، وسيعيد واحد فقط من مورّديك التسعير.

التفريغ يسير بالعكس وهو أبسط سطر في الفاتورة كلها — لكل دقيقة صوت، بشكل ثابت:

transcribing 59.6 secondsTEXT
whisper                  $0.005960     ($0.006 / min)
gpt-transcribe           $0.004470     ($0.0045 / min)
gpt-4o-mini-transcribe   $0.002980     ($0.003 / min)
gpt-live-transcribe      $0.016887     ($0.017 / min)

لاحظ الصف الأخير مقابل الثالث: فعل ذلك مباشرة، بينما تصل الكلمات، يكلّف 5.7 مرات أكثر من فعله على ملف منتهٍ. تلك الفجوة هي ثمن عدم القدرة على batch، وهي ما يجعل القسم التالي مكلفاً.

الآن الرقم الذي يقرر هل الصوت ميزة أم منتج.

المكالمة: محادثة دعم من عشر جولات، 149 كلمة، وهو ما يساوي عند 150 كلمة في الدقيقة معلنة 59.6 ثانية من الكلام — 21.2 نطقها المتصل، و38.4 نُطقت رداً عليه. تحويلات token هي تحويلات المزوّدين أنفسهم. OpenAI: «audio tokens في رسائل المستخدم تساوي 1 token لكل 100 ms من الصوت، بينما audio tokens في رسائل assistant تساوي 1 token لكل 50 ms».14 Google: 25 token في الثانية، في الاتجاهين، وهو ما تؤكده صفحة الأسعار بنشر $12.00 لكل مليون و$0.018 لكل دقيقة في السطر نفسه.12

تتراكم المحادثة تماماً كما قال الفصل 16، لأنها الآلية نفسها: «تُرسل المحادثة كاملة إلى النموذج لكل Response... ولذلك ستصبح الجولات اللاحقة في الجلسة أكثر تكلفة».14 لكن التاريخ الآن يُقاس بـaudio tokens.

الجولةالمستخدمassistantصوت جديد داخلصوت cached داخلصوت خارجالتكلفة
14.4 s9.2 s440184$0.013224
25.6 s9.6 s56228192$0.014211
35.2 s9.2 s52476184$0.013670
44.0 s4.8 s4071296$0.007749
52.0 s5.6 s20848112$0.008187

والآن المقارنة التي تقرر المنتج، وكل الأربعة مطبّعة إلى دقيقة:

لكل دقيقةمقارنة بالنص
gpt-realtime-2.1، بلا caching$0.13125937.9×
gpt-realtime-2.1، history cached$0.05742516.6×
gemini-3.1-flash-live، بلا caching$0.0239656.9×
الكلمات نفسها مكتوبة، gpt-5.6-terra$0.003461

ثمانٍ وثلاثون مرة. ليست ثمانية وثلاثين في المئة. التبادل نفسه تماماً، عند إجرائه بالصوت بدلاً من النص، أغلى بما يقارب رتبتين عشريتين، ولا يأتي أي من تلك الفجوة من هامش اختاره أحد — بل من معدل التحويل. ثانية واحدة من صوت assistant تساوي عشرين token. تلك الثانية نفسها تحمل 2.5 كلمة بالمعدل المعلن، والنص المقاس يجري عند 1.26 token لكل كلمة، لذا فهي كنص 3.15 tokens. الصوت حزمة أضخم 6.3 مرات للمعنى نفسه، وكل token صوتي يُفوَّتر بـ5.3 مرات سعر text output وبـ16 مرة سعر text input. اضرب نسبة الحجم في نسبة السعر، وستظهر رتبة المقدار قبل أن تبدأ أي محاسبة.

تخرج نتيجتان تشغيليتان مباشرة من الجدول.

Audio caching ليس تحسيناً، بل نموذج العمل. cached audio input بسعر $0.40 لكل مليون مقابل $32.00 للجديد — خصم 98.75 % يخفض المكالمة إلى النصف. القاعدة هي قاعدة الفصل 16 من دون تغيير: cache يطابق prefix، لذا فإن أي شيء يُدرج في مقدمة المحادثة أثناء المكالمة يدمّره، والمكان الطبيعي لوضع «تم الآن التحقق من المتصل» هو هناك بالضبط.

ولا شيء تفعله في العميل يلغي فوترة صوت. يتحدث المستخدم فوق assistant، يوقف كودك التشغيل، ويصمت مكبر الصوت. كل ما كان قد تولد فُوتر بالفعل، لأن الفوترة تتراكم عندما تُنشأ الاستجابة؛ وبقاعدة الفصل 16 كل ما يبقى في المحادثة يُعاد إرساله، كصوت إدخال، في كل جولة لاحقة. أوضح الفصل 14 هذه النقطة عن إيقاف بث نصي. في الصوت تكلف ثلاثين مرة أكثر.

يُباع الفيديو بالثانية لدى بعض المورّدين وبالمقطع لدى آخرين، مع شرائح للدقة وأحياناً للمدة. هذان الشكلان لا يختلفان في الراحة فقط؛ إنهما يتقاطعان.

النموذج1 s2 s5 s10 s20 s
veo-3.1، لكل ثانية، 1080p$0.400$0.800$2.000$4.000$8.000
veo-3.1-fast، لكل ثانية، 1080p$0.120$0.240$0.600$1.200$2.400
sora-2، لكل ثانية، 720p$0.100$0.200$0.500$1.000$2.000
hailuo-02، لكل مقطع، 1080p$0.480$0.480$0.480$0.480$0.480
mochi، لكل GPU-second$0.018$0.037$0.092$0.183$0.366

المورّد الذي يسعّر بالمقطع أغلى من المسعّر بالثانية تحت 1.2 ثانية، وأرخص 16.7 مرة عند عشرين ثانية. لا يبقى أي ترتيب بين هذين النموذجين بعد تغيير طول المقطع، لذا فإن «أي نموذج فيديو هو الأرخص» ليس سؤالاً عن النماذج.

الصف الأخير أسوأ، وهو القلب الصادق لهذا الفصل. mochi يُفوَّتر مقابل ثواني GPU حقيقية — زمن التنبؤ المقاس للمهمة — بسعر $0.001400 في الثانية على A100 و$0.001525 على H100، وهي أسعار الآلة المؤجرة ولا شيء غيرها.15 هذه تعرفة دقيقة تماماً، لكنها ليست سعراً، لأن الكمية التي تضربها غير معروفة إلا بعد أن تكون قد التزمت بالدفع. الصف أعلاه يفترض اثنتي عشرة GPU-seconds لكل ثانية مخرجات؛ ضاعف ذلك الافتراض أربع مرات فيغادر الشريحة الأرخص، ولا يصل إلى وسط الجدول إلا عند ست مرات. إنها التعرفة الوحيدة في هذه الصفحة التي لا يمكنك وضعها في عرض سعر.

إذن: tokens، وimage tokens، وأحرف، ودقائق، وثواني فيديو، ومقاطع كاملة، وGPU seconds، ووحدات ثابتة. ثماني كميات، والطريقة الوحيدة لوضعها على محور واحد هي إعلان workload وتسعيرها.

هذا هو امتداد computeCost من الفصل 16 — آلية الشرائح نفسها، لكن الآن مع معايير ليست طول prompt:

normalise.tsTS
export interface MediaCriteria {
  resolution?: string[]; quality?: string[];
  hasAudio?: boolean; maxDurationSeconds?: number;
}
export interface MediaTier { when?: MediaCriteria; price: number }
export type MediaRate = number | MediaTier[];

const matches = (when: MediaCriteria, u: Usage) => {
  const inList = (l?: string[], v?: string) => !l || (v !== undefined && l.includes(v));
  if (!inList(when.resolution, u.resolution)) return false;
  if (!inList(when.quality, u.quality)) return false;
  if (when.hasAudio !== undefined && when.hasAudio !== (u.hasAudio ?? false)) return false;
  if (when.maxDurationSeconds !== undefined
      && (u.videoSeconds ?? 0) > when.maxDurationSeconds) return false;   
  return true;
};

const mediaPrice = (rate: MediaRate | undefined, u: Usage): number => {
  if (rate === undefined) return 0;
  if (typeof rate === "number") return rate;
  for (const t of rate.filter((t) => t.when)) if (matches(t.when!, u)) return t.price;
  return rate.find((t) => !t.when)?.price ?? 0;      // the tier with no criteria is the default
};

export function computeCost(p: Pricing, u: Usage): number {
  let c = textCost(p, u);                             // Chapter 16, unchanged
  if (p.imageInputToken || p.imageOutputToken) {
    c += (u.imageInputTokens ?? 0) * (p.imageInputToken ?? 0)
       + (u.imageOutputTokens ?? 0) * (p.imageOutputToken ?? 0);
  } else if (p.imageUnit !== undefined) c += (u.images ?? 1) * mediaPrice(p.imageUnit, u);  
  if (p.videoSecond !== undefined) c += (u.videoSeconds ?? 0) * mediaPrice(p.videoSecond, u);
  if (p.videoUnit   !== undefined) c += (u.videoCount ?? 1)   * mediaPrice(p.videoUnit, u);
  c += (u.audioInputTokens ?? 0)       * (p.audioInputToken ?? 0)
     + (u.cachedAudioInputTokens ?? 0) * (p.cachedAudioInputToken ?? p.audioInputToken ?? 0)
     + (u.audioOutputTokens ?? 0)      * (p.audioOutputToken ?? 0)
     + (u.computeSeconds ?? 0)         * (p.computeSecond ?? 0)
     + (u.chars ?? 0)                  * (p.perChar ?? 0)
     + (u.minutes ?? 0)                * (p.perMinute ?? 0);
  return c;
}

السطران المعلّمان هما موضع الانكسار. تعرفة مقتبسة لكل وحدة تضرب u.images ?? 1؛ وتعرفة مقتبسة لكل token تضرب شيئاً قيمته الافتراضية صفر. أعطِ كليهما استخداماً فارغاً — الشكل الذي تحصل عليه عند فشل القياس — وشاهد:

the same missing measurement, priced by unitTEXT
per image (nano-banana-pro)     empty usage => $0.1500
per clip  (hailuo-02)           empty usage => $0.1500
per unit  (a cloned voice)      empty usage => $3.0000
per token (gpt-image-2)         empty usage => $0.0000
per second (veo-3.1)            empty usage => $0.0000
per GPU-second (mochi)          empty usage => $0.0000

لم يحدث شيء ست مرات، وكلّف ثلاثة دولارات مرة واحدة ولا شيء خمس مرات. هذا ليس فرق تقريب؛ إنه قرار بشأن معنى الرقم الغائب، اتُّخذ على حدة لكل وحدة ولم يُكتب قط. القاعدة السليمة هي أن الحقل الذي لم يقسه أحد يبقى غائباً، لأن «غير مقاس» و«قيس وخرج صفراً» شيئان مختلفان. هذه الدالة تخالف ذلك بهدوء.

الفشل الثاني هو المدة. التعرفة المسعّرة بالمقطع تختار شريحتها باستخدام maxDurationSeconds مقابل u.videoSeconds ?? 0، لذا فإن استخداماً لم يسجل مدة قط يطابق أقصر شريحة:

hailuo-02, 768pTEXT
duration recorded    ->  $0.45
duration missing     ->  $0.27

خصم أربعين في المئة لأننا لا نعرف كم كان طول الفيديو. العلتان لهما الجذر نفسه: قيمة افتراضية اختيرت للراحة داخل دالة مهمتها كلها أن تكون دقيقة.

مع قابلية حساب التكاليف، تحتاج المقارنة إلى نصفها الآخر — workload تمثيلية معلنة، واحدة لكل محرك، تُذكر علناً حتى يستطيع القارئ مخالفتها:

workloads.tsTS
export const representative = {
  text:   { blend: [[{ promptTokens: 1e6 }, 0.25], [{ completionTokens: 1e6 }, 0.75]] },
  image:  { images: 1, imageInputTokens: 50, imageOutputTokens: 1500 },
  video:  { videoSeconds: 5, videoCount: 1, resolution: "1080p", hasAudio: true, computeSeconds: 60 },
  voice:  { chars: 1000, computeSeconds: 10 },
  stt:    { minutes: 1 },
};

كل سطر من هذه السطور حجة. النص يمزج ربع إدخال وثلاثة أرباع إخراج لأن الاستخدام الحقيقي يميل إلى الإخراج؛ مزج 50/50 يرتب النماذج بشكل مختلف. workload الصورة تفترض 1,500 output tokens، بين 1,056 من OpenAI لمربع متوسط و1,584 لعمودي متوسط. الفيديو يفترض خمس ثوانٍ عند 1080p، وقد رأينا للتو مورّدين يتبادلان المكان عند 1.2 ثانية. ومدخل الحوسبة يفترض ستين GPU-seconds لأنه لا يوجد شيء آخر نفترضه.

وهذه هي الطريقة، وهي الوحيدة الصادقة المتاحة: لا يمكنك مقارنة أسعار بوحدات مختلفة؛ لا يمكنك إلا مقارنة تكلفة workload كتبتها. أي جدول يرتب نماذج multimodal من دون طباعة workload الخاصة به إنما يرتب افتراضاته هو.

يمكنك الآن تسعير أي شيء يمكن لنموذج إنتاجه، بأي وحدة يُباع بها، وأن تقول بصوت عالٍ أي workload افترضتها المقارنة. هذا يغلق الفاتورة التي فتحها الفصل 16، ويغلق الجزء الثالث: كل شيء من الفصل 14 إلى هنا كان عن استدعاء واحد — كيف تصنعه، وماذا تضع فيه، وكيف تعمل sampling له، وماذا يعيد، وماذا يكلّف.

يغيّر الفصل 22 وحدة التحليل، والتغيير مكلف. agent ليس استدعاءً واحداً؛ إنه حلقة تقرر بنفسها كم استدعاء ستجري، وحساب الفصلين الأخيرين هو ما يحول ذلك من مخطط معماري إلى ميزانية. يبدأ بطرح السؤال نفسه على النموذج نفسه مرتين، مع إضافة أداة واحدة إلى الكتالوج في المرة الثانية، وقياس ما فعلته تلك الأداة الواحدة: صار الاستدعاء الواحد اثنين، وصارت تسعة وثلاثون input tokens تساوي 420.

هل يجعل ذلك منه agent؟ يعتمد على أي تعريف منشور تفتح، وهما لا يتفقان. أحدهما لا يتفق مع نفسه.


قُرئ كل سعر ومعادلة ومعدل تحويل في هذا الفصل من صفحة المزوّد نفسه في 7 سبتمبر 2026 ويُقتبس مع ذلك التاريخ، لأنها كلها ستتحرك. حُسبت أعداد token والتكاليف والمقارنات على تلك البيانات بواسطة الكود المطبوع أعلاه، على آلة واحدة، من دون إجراء أي API call مدفوع — وهذا أيضاً هو السبب الصادق لعدم وجود أي ادعاء latency في هذا الفصل.

أُنتجت دوال image-token، وجداول التكلفة، وتفصيل مكالمة الصوت، ونتائج الاستخدام الفارغ بواسطة TypeScript المطبوع في هذا الفصل، وشُغّلت على Node 22. الحوار المستخدم في مقارنة الصوت كان 149 كلمة، وجرى tokenizer له باستخدام tiktoken ضمن ترميز o200k_base عند 188 tokens؛ ومدته مستنتجة من معدل معلن قدره 150 كلمة في الدقيقة، وهو معامل في المقارنة وليس قياساً. كل رقم من المزوّدين يحمل الحاشية التي تسمّي الصفحة التي جاء منها.

  1. Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). الرقع، والإسقاط الخطي إلى بُعد embedding، وposition embeddings التي تجعل الشبكة مقروءة لنموذج تسلسلي.

  2. Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). تدريب contrastive لمُرمِّز صور ومُرمِّز نصوص على 400 مليون زوج، والفضاء المشترك الذي يفترضه كل ما يأتي بعده.

  3. Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). مُرمِّز رؤية مجمّد، ونموذج لغة مجمّد، وطبقات وصل مدرّبة — البنية التي حوّلت فهم الصور إلى قدرة محادثة.

  4. Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). إسقاط خطي واحد كجسر وبيانات تعليمات مولّدة كمجموعة تدريب؛ السبب في تقارب نماذج الرؤية-اللغة المفتوحة على شكل واحد.

  5. Anthropic، Vision، platform.claude.com/docs/en/build-with-claude/vision، تم الوصول إليه في 2026-09-07. «يرى Claude الصور في رقع بدلاً من البكسلات. كل رقعة هي كتلة 28×28 بكسل من الصورة، ويُشار إليها كـvisual token. لذلك تكلّف الصورة ⌈width / 28⌉ × ⌈height / 28⌉ visual tokens.» وكذلك فئتا الدقة (القياسية: حافة طويلة 1568 بكسل، و1568 visual tokens؛ والدقة العالية، على Claude 4.7 وما بعده: 2576 بكسل و4784 tokens)، وقاعدة التصغير، وجدول الأحجام وعدد tokens ذي الصفوف الستة المعاد إنتاجه أعلاه. أسعار النماذج من Anthropic، Pricing، platform.claude.com/docs/en/about-claude/pricing، التاريخ نفسه: Claude Haiku 4.5 عند $1 و$5 لكل مليون input وoutput tokens.

  6. Google، Image understanding، ai.google.dev/gemini-api/docs/image-understanding، تم الوصول إليه في 2026-09-07. «258 tokens إذا كان كلا البعدين <= 384 بكسل. الصور الأكبر تُقسّم إلى tiles بحجم 768x768 بكسل، وكل واحدة تكلف 258 tokens»، مع صيغة وحدة القص — floor(min(width, height) / 1.5)، وقسمة الأبعاد عليها وضربها معاً — والمثال المحلول لصورة 960 × 540 التي تعطي 3 × 2 = 6 tiles. تسميها Google «صيغة تقريبية»؛ وثبات المقياس المشتق أعلاه خاصية للصيغة كما نُشرت. audio input على العائلة نفسها هو 32 tokens لكل ثانية صوت (ai.google.dev/gemini-api/docs/audio، التاريخ نفسه).

  7. OpenAI، Images and vision، developers.openai.com/api/docs/guides/images-vision، تم الوصول إليه في 2026-09-07. مصدر القاعدة القائمة على الرقع (رقع 32 × 32، patch_count = ceil(width/32)×ceil(height/32)، صيغة shrink_factor وتعديلها الصحيح، حد رفض 30,000 رقعة)؛ وجدول تحجيم النماذج، بما في ذلك أن low على gpt-5.4 يستخدم حد 2048 بكسل وميزانية 6,144 رقعة «لذا يمكنه استخدام tokens أكثر من high»، مقابل ميزانية 2,500 رقعة في high؛ وجدول المضاعفات (1.2 لعائلات GPT-5.x، و1.62 لـgpt-4.1-mini، و2.46 لـgpt-4.1-nano)؛ والمثالان المحلولان المعاد إنتاجهما أعلاه (1024 × 1024 → 1229 tokens، و2048 × 2048 → 3000 tokens)؛ والقواعد القائمة على tile للنماذج الأقدم (أساس زائد tiles من 512 بكسل، 85 + 170 على gpt-4o)؛ وقائمة القيود المقتبسة في صندوق الرؤية. 2

  8. Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). جدول إضافة الضجيج الأمامي، وإعادة الصياغة التي تحول الهدف إلى التنبؤ بالضجيج المضاف، وحلقة sampling.

  9. Rombach, R., Blattmann, A., Lorenz, D., Esser, P. and Ommer, B. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752 (2022). تشغيل عملية diffusion في فضاء latent مضغوط، وهو ما جعل عدد الخطوات الثابت ميسور التكلفة بما يكفي لبيعه لكل صورة.

  10. Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023)، الفصل 18. التفويض المعلن لكل ما تخطاه هذا الفصل عن diffusion — الحد التبايني، وجداول الضجيج، وclassifier-free guidance، وعائلات sampler. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021)، هو adapter نفسه، الذي قُدم في الفصل 11 على نموذج لغة واستُخدم هنا على نموذج صورة من دون تغيير في الرياضيات. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022)، هو نموذج التفريغ الذي يظهر سعره لكل دقيقة أعلاه.

  11. OpenAI، Image generation، developers.openai.com/api/docs/guides/image-generation، وPricing، developers.openai.com/api/docs/pricing، وصفحة النموذج gpt-image-1، كلها تم الوصول إليها في 2026-09-07. صفحة النموذج gpt-image-2 لا تحمل قسماً للأسعار؛ أسعاره تأتي من صفحة الأسعار أعلاه. تنشر صفحة GPT Image 1 text input بسعر $5.00، وimage input بسعر $10.00، وimage output بسعر $40.00 لكل مليون tokens بجانب جدول كل صورة المستخدم في الاشتقاق أعلاه. كذلك: جدول output-token للنماذج السابقة لـgpt-image-2 (272 / 408 / 400 منخفض، 1056 / 1584 / 1568 متوسط، 4160 / 6240 / 6208 عالٍ، للمربع والعمودي والأفقي)؛ وجداول أسعار كل صورة لـGPT Image 2 و1.5 و1 و1 Mini المستخدمة في الاشتقاقات أعلاه؛ والجملة «الدقة غير المربعة الأكبر قد تنتج أحياناً output tokens أقل من دقة أصغر أو مربعة عند إعداد الجودة نفسه»؛ والملاحظة أن كل صورة جزئية مبثوثة تكلف 100 image output tokens إضافية؛ وأسعار gpt-image-2: $8.00 image input، و$2.00 cached image input، و$30.00 image output، و$5.00 text input لكل مليون tokens. أسعار نماذج النص المستخدمة في المقارنات: gpt-5.6-terra بسعر $2.00 إدخال، و$0.20 cached input، و$12.00 إخراج، وgpt-5.6-luna بسعر $0.20 و$1.20، الفئة القياسية، short context. الفيديو: sora-2 بسعر $0.10 لكل ثانية عند 720p وsora-2-pro بسعر $0.30 و$0.50 و$0.70 عند 720p و1024p و1080p. التفريغ: $0.006 و$0.0045 و$0.003 و$0.017 لكل دقيقة لـgpt-4o-transcribe وgpt-transcribe وgpt-4o-mini-transcribe وgpt-live-transcribe. 2

  12. Google، Gemini Developer API pricing، ai.google.dev/gemini-api/docs/pricing، تم الوصول إليه في 2026-09-07. Gemini 3.1 Flash-Lite بسعر $0.25 لكل مليون input tokens (نص وصورة وفيديو) و$1.50 للإخراج. Gemini 3.1 Flash Image: image output بسعر $60 لكل مليون tokens، مع المعادلات المنشورة لـ747 و1120 و1680 و2520 tokens لصور 0.5K و1K و2K و4K وأسعارها لكل صورة $0.045 و$0.067 و$0.101 و$0.151. Gemini 3.1 Flash TTS: $1.00 text input، و$20.00 audio output، و«audio tokens تقابل 25 tokens لكل ثانية صوت». Gemini 3.1 Flash Live Preview: $0.75 نص و«$3.00 أو $0.005/min» audio input، و«$4.50 (نص) $12.00 أو $0.018/min (صوت)» للإخراج. Veo 3.1 لكل ثانية مع صوت: $0.40 عند 720p و1080p و$0.60 عند 4K standard؛ و$0.10 و$0.12 و$0.30 fast. يفوتر Gemini Omni Flash video output «بمعدل 5,792 tokens لكل ثانية من فيديو 720p»، وهي حاشية الصفحة نفسها التي تحول ذلك إلى نحو $0.10 في الثانية — أوضح تصريح منشور في أي مكان بأن سعر الوسائط لكل ثانية هو سعر token. 2

  13. صفحات نماذج OpenAI لـtts-1 وtts-1-hd وgpt-4o-mini-tts، developers.openai.com/api/docs/models، تم الوصول إليها في 2026-09-07. tts-1 بسعر $15.00 وtts-1-hd بسعر $30.00 لكل مليون حرف؛ وgpt-4o-mini-tts بسعر $0.60 لكل مليون text input tokens و$12.00 لكل مليون audio output tokens — المورّد نفسه، والعملية نفسها، ووحدتان.

  14. OpenAI، Managing costs (Realtime API)، developers.openai.com/api/docs/guides/realtime-costs، تم الوصول إليه في 2026-09-07. «Audio tokens في رسائل المستخدم تساوي 1 token لكل 100 ms من الصوت، بينما audio tokens في رسائل assistant تساوي 1 token لكل 50ms من الصوت.» وكذلك: «تُرسل المحادثة كاملة إلى النموذج لكل Response... ولذلك ستصبح الجولات اللاحقة في الجلسة أكثر تكلفة»؛ وتتراكم التكاليف عند إنشاء Response؛ والمثال المحلول من جولتين الذي يعيد الجدول أعلاه إنتاج تراكمه؛ وحمولة استخدام response.done مع تقسيمات input_token_details وoutput_token_details. الأسعار من صفحة الأسعار، التاريخ نفسه: صوت gpt-realtime-2.1 بسعر $32.00 إدخال، و$0.40 cached input، و$64.00 إخراج لكل مليون tokens، والنص بسعر $4.00 و$0.40 و$24.00، وimage input بسعر $5.00. 2

  15. Replicate، Pricing، replicate.com/pricing، تم الوصول إليه في 2026-09-07. Nvidia A100 (80GB) بسعر $0.001400 في الثانية و$5.04 في الساعة؛ وNvidia H100 بسعر $0.001525 في الثانية و$5.49 في الساعة.

هل أنت مستعد لتترك الاختيار لـ LIA؟

ابنِ بكل نماذج الذكاء الاصطناعي في مكان واحد — ابدأ مجانًا اليوم.