بلاگ پر واپس جائیں

نئے سیکھنے والوں کے لیے AIگائیڈ

AI کا جواب درمیان میں کیوں رک جاتا ہے؟ max_tokens، کانٹیکسٹ ونڈو اور finish_reason کی وضاحت

درمیان میں رکنے والا AI جواب کسی حد سے ٹکرا گیا۔ finish_reason پڑھیں، max_tokens کو بھری ہوئی کانٹیکسٹ ونڈو سے الگ پہچانیں اور ہر ماڈل کی آؤٹ پٹ حد چیک کریں۔

از CheapTokens Teamشائع شدہ اپ ڈیٹ کردہ 8 منٹ کا مطالعہ

cheaptokens لوگو کے ساتھ گہرا کور: باکسز میں max_tokens، finish_reason اور length کے الفاظ، اور سرخی “Answer cut off mid-sentence?”
اس صفحہ پر
  1. جواب کاٹنے والی تین حدیں
  2. پہلے finish_reason پڑھیں
  3. حل 1: max_tokens بڑھائیں
  4. حل 2: جب کانٹیکسٹ ونڈو بھر جائے
  5. حل 3: لمبا جواب حصوں میں حاصل کریں
  6. جب finish_reason stop ہو
  7. جواب کی لمبائی کے لحاظ سے ماڈل منتخب کرنا

ایک جواب جو کسی جملے کے درمیان رک جائے، تقریباً ہمیشہ کسی حد کی وجہ سے کٹا ہوتا ہے۔ ماڈل نے اپنا تسلسل نہیں کھویا؛ درخواست میں جگہ ختم ہو گئی۔ جواب بتاتا ہے کہ کون سی حد تھی: finish_reason پڑھیں۔ length کا مطلب ہے کہ کوئی حد لگ گئی۔ stop کا مطلب ہے کہ ماڈل نے خود ختم کیا۔

تین چیزیں طے کرتی ہیں کہ جواب کتنا لمبا ہو سکتا ہے۔ ایک بار جب آپ جان لیں کہ کون سی چیز آپ کو کاٹ رہی ہے، تو حل ایک منٹ میں ہو جاتا ہے۔

جواب کاٹنے والی تین حدیں#

  • max_tokens ایک حد ہے جو آپ درخواست میں مقرر کرتے ہیں۔ جب جواب اس تک پہنچتا ہے، تو جنریشن رک جاتی ہے، چاہے درمیان میں لفظ ہو۔ DeepSeek کی API ریفرنس اسے کمپلیشن میں جنریٹ ہونے والے ٹوکنز کی زیادہ سے زیادہ تعداد کے طور پر بیان کرتی ہے۔
  • ماڈل کی آؤٹ پٹ حد اس ماڈل کے ایک جواب کی زیادہ سے زیادہ حد ہے۔ یہ ماڈل کی اپنی ہے، لہٰذا max_tokens کو اس کے برابر یا اس سے کم رکھیں۔ ہمارے ماڈلز کے نمبر نیچے جدول میں ہیں۔
  • کانٹیکسٹ ونڈو پوری گفتگو کے لیے جگہ ہے: آپ کا ان پٹ اور جواب مل کر۔ DeepSeek کی ریفرنس کہتی ہے کہ ان پٹ اور جنریٹ شدہ ٹوکنز مل کر ماڈل کی کانٹیکسٹ لمبائی سے محدود ہیں۔

اگر ٹوکن اب بھی ایک مبہم تصور ہے، تو What is a token in AI? سے شروع کریں۔ یہ صفحہ فرض کرتا ہے کہ آپ جانتے ہیں کہ ٹوکن کیا ہے۔

پہلے finish_reason پڑھیں#

چیٹ جواب میں ہر انتخاب کے ساتھ ایک finish_reason ہوتا ہے۔ اس کے ساتھ، usage بتاتا ہے کہ کتنے ٹوکنز اندر اور باہر گئے۔

یہاں ایک کٹے ہوئے جواب کی مثال ایک مکمل جواب کے ساتھ ہے۔ درخواست نے پوچھا "In one short sentence, what is a token?"، پہلے max_tokens کو 16 پر سیٹ کر کے، پھر 200 پر۔

مثالی مثال، ریکارڈ شدہ جواب نہیں: آپ کی گنتی اور اضافی فیلڈز مختلف ہوں گی۔

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usu" },
      "finish_reason": "length"
    }
  ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 16, "total_tokens": 37 }
}
json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usually a word or part of a word." },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 24, "total_tokens": 45 }
}

پہلے جواب میں completion_tokens 16 ہے، بالکل حد کے برابر، اور متن "usu" پر ختم ہوتا ہے۔ دوسرے میں ماڈل 24 ٹوکنز پر رکا، جو 200 کی حد سے کافی کم ہے، کیونکہ یہ مکمل ہو گیا تھا۔

یہ جاننے کے لیے کہ کیا ہوا، اس ترتیب سے گزریں:

  1. finish_reason کو دیکھیں۔ اگر یہ stop ہے، تو جواب مکمل ہے۔ ماڈل نے ختم کرنے کا انتخاب کیا، یا آپ کی سیٹ کردہ اسٹاپ سیکوئنس پر پہنچا۔ اگر یہ length ہے، تو کسی حد نے جواب کاٹ دیا، اور اگلا مرحلہ بتاتا ہے کہ کون سی۔ دیگر اقدار بھی موجود ہیں، جیسے content_filter اور tool_calls؛ ان میں سے کوئی بھی لمبائی کا مسئلہ نہیں ہے۔
  2. completion_tokens کا موازنہ max_tokens سے کریں جو آپ نے بھیجا۔ اگر وہ برابر ہیں یا تقریباً برابر ہیں، تو آپ max_tokens پر پہنچ گئے۔
  3. اگر completion_tokens max_tokens سے کافی کم ہے اور prompt_tokens بڑا ہے، تو کانٹیکسٹ ونڈو غالباً بھر گئی ہے۔ DeepSeek کی ریفرنس دونوں صورتوں کے لیے length استعمال کرتی ہے، لہٰذا صرف فیلڈ سے انہیں الگ نہیں کیا جا سکتا؛ مرحلہ 2 کا موازنہ ہی بتاتا ہے۔ Anthropic اور Z.ai کی دستاویزات دوسری صورت کو الگ سے model_context_window_exceeded کہتی ہیں۔ اپنے جوابات میں فیلڈ دیکھیں تاکہ معلوم ہو کہ آپ کو کون سا نام ملتا ہے۔

تینوں وضاحتیں ڈویلپرز کی دستاویزات سے ہیں، 20 اکتوبر 2026 کو چیک کی گئیں: DeepSeek، Anthropic اور Z.ai۔

آپ کیا دیکھتے ہیں finish_reason وجہ کیا کریں
کٹا ہوا، completion_tokens برابر max_tokens length max_tokens پہنچ گیا max_tokens بڑھائیں، یا جواب حصوں میں مانگیں
کٹا ہوا، completion_tokens max_tokens سے بہت کم، لمبا ان پٹ length (یا کچھ APIs میں model_context_window_exceeded) کانٹیکسٹ ونڈو بھری ہوئی ان پٹ یا ہسٹری مختصر کریں، یا بڑی ونڈو والا ماڈل منتخب کریں
مکمل لیکن آپ کی خواہش سے چھوٹا stop ماڈل مکمل ہو گیا، یا اسٹاپ سیکوئنس فائر ہوا مزید تفصیل مانگیں؛ stop پیرامیٹر چیک کریں
کوئی متن نہیں، یا انکار content_filter جواب فلٹر ہو گیا درخواست دوبارہ لکھیں
کوئی متن نہیں، بجائے اس کے ٹول درخواست tool_calls ماڈل ٹول کال کرنا چاہتا ہے ٹول چلائیں اور نتیجہ واپس بھیجیں

حل 1: max_tokens بڑھائیں#

سب سے عام وجہ حل کرنے میں بھی سب سے آسان ہے۔ max_tokens خود سیٹ کریں، تاکہ آپ کو معلوم ہو کہ کون سی حد لاگو ہوتی ہے۔ ڈیفالٹ پر بھروسہ نہ کریں۔

python
from openai import OpenAI

client = OpenAI(base_url="https://api.cheaptokens.dev/v1", api_key="YOUR_API_KEY")

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Write a detailed guide to setting up a home network."}],
    max_tokens=16000,  # example value: stay at or below the model's output limit
)

choice = resp.choices[0]
print(choice.finish_reason, resp.usage.completion_tokens)

یہ کال کی ساخت دکھاتا ہے۔ کلید یہاں YOUR_API_KEY کے طور پر داخل ہوتی ہے؛ اصل کلید کو شیئر کیے گئے کوڈ سے باہر رکھیں۔

نمبر بڑھانا صرف ماڈل کی اپنی حد تک مدد کرتا ہے۔ یہاں CheapTokens پر حدیں ہیں، 20 اکتوبر 2026 کو CheapTokens ماڈل لسٹ کے خلاف چیک کی گئیں:

ماڈل ماڈل ID فی جواب زیادہ سے زیادہ آؤٹ پٹ کانٹیکسٹ
DeepSeek-V4-Flash (0731) deepseek-ai/DeepSeek-V4-Flash-0731 32,768 ٹوکنز 380K
GLM-5.3-Flash zai-org/GLM-5.3-Flash 8,192 ٹوکنز 390K
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 8,192 ٹوکنز 200K

ڈویلپرز اپنی APIs کے لیے اپنی حدیں شائع کرتے ہیں۔ مثال کے طور پر، Z.ai GLM-5 سیریز کے لیے 128K تک آؤٹ پٹ درج کرتا ہے۔ یہ CheapTokens پر GLM-5.3-Flash کی حدیں نہیں ہیں، جو فی جواب 8,192 ٹوکنز ہے۔ CheapTokens پر جو بھی بنائیں، اوپر والا جدول استعمال کریں۔

حل 2: جب کانٹیکسٹ ونڈو بھر جائے#

چیٹ میں، پوری ہسٹری ہر پیغام کے ساتھ دوبارہ جاتی ہے، لہٰذا ان پٹ ہر موڑ پر بڑھتا ہے۔ کانٹیکسٹ ونڈو کو وہ ہسٹری اور نیا جواب دونوں رکھنے ہوتے ہیں۔ اگر ہسٹری اکیلے ہی تقریباً ساری جگہ لے لے، تو جواب کے لیے تقریباً کوئی جگہ نہیں بچتی۔

یہ ونڈوز بڑی ہیں، اور ایک مختصر سوال انہیں نہیں بھرے گا۔ لمبی چیٹس اور پیسٹ کی گئی دستاویزات بھریں گی۔ کیا مدد کرتا ہے:

  • نئے کام کے لیے نئی چیٹ شروع کریں، پرانی جاری رکھنے کے بجائے۔
  • ماڈل سے کہیں کہ اب تک کی گفتگو کا خلاصہ کرے، اور صرف خلاصہ آگے لے جائیں۔
  • پرانے پیغامات اور منسلکات کاٹ دیں جن کی مزید ضرورت نہیں۔
  • اگر ان پٹ خود بہت بڑا ہے، تو سب سے بڑی ونڈو والا ماڈل منتخب کریں۔ ہمارے درمیان وہ GLM-5.3-Flash ہے 390K کے ساتھ۔ اس کی آؤٹ پٹ حد 8,192 ٹوکنز ہے، لہٰذا لمبا نتیجہ حصوں میں مانگیں۔

حل 3: لمبا جواب حصوں میں حاصل کریں#

جب آپ جو جواب چاہتے ہیں وہ ماڈل کی آؤٹ پٹ حد سے لمبا ہو، تو کوئی سیٹنگ اسے ایک جواب میں نہیں بٹھا سکتی۔ اسے ٹکڑوں میں مانگیں: جب finish_reason length ہو، تو جزوی جواب واپس بھیجیں اور ماڈل سے جاری رکھنے کو کہیں۔

python
messages = [{"role": "user", "content": "Write a detailed guide to setting up a home network."}]
parts = []

for _ in range(4):  # example limit: at most 4 rounds
    resp = client.chat.completions.create(
        model="zai-org/GLM-5.3-Flash",
        messages=messages,
        max_tokens=8000,  # example value: below this model's output limit
    )
    choice = resp.choices[0]
    parts.append(choice.message.content)
    if choice.finish_reason != "length":
        break
    messages.append({"role": "assistant", "content": choice.message.content})
    messages.append({"role": "user", "content": "Continue exactly where you stopped. Don't repeat anything."})

text = "".join(parts)

وہی انتباہ: پیٹرن کی مثال، ریکارڈ شدہ رن نہیں۔ حصوں کے درمیان کے جوڑ پڑھیں۔ ماڈل کبھی کبھی جملہ دہراتا ہے یا جوڑ پر فہرست دوبارہ شروع کرتا ہے۔

ہر راؤنڈ اب تک کا سب کچھ ان پٹ کے طور پر دوبارہ بھیجتا ہے، اور ہر آؤٹ پٹ ٹوکن بل کیا جاتا ہے۔ لمبے جواب کی لاگت مختصر سے زیادہ ہوتی ہے۔ یہاں 2,000 ٹوکنز کے ان پٹ پر آٹھ ہزار ٹوکنز کا جواب ہے، جو جدول کے ہر ماڈل میں فٹ بیٹھتا ہے:

ماڈل لاگت OpenRouter
GLM-5.3-Flash $0.00036 $0.00069
DeepSeek-V4-Flash $0.00083 $0.0013
MiniMax-M2.7 $0.0013 $0.0102

کل 2,000 ان پٹ اور 8,000 آؤٹ پٹ ٹوکنز۔ فی 1M ٹوکنز کی قیمتیں موجودہ ہیں اور ہمارے ٹیرف کے ساتھ تبدیل ہوتی ہیں؛ OpenRouter کالم اسی ورک لوڈ کے لیے حوالہ جاتی قیمتیں دکھاتا ہے۔

جب finish_reason stop ہو#

stop کا مطلب ہے کہ ماڈل نے جواب ختم کیا۔ اگر یہ آپ کی خواہش سے جلد ختم ہوا، تو یہ حد کا مسئلہ نہیں ہے اور بڑا max_tokens کچھ نہیں بدلتا۔ بتائیں کہ آپ کیا چاہتے ہیں: لمبائی، حصے، تفصیل کی سطح۔ یہ بھی چیک کریں کہ درخواست stop پیرامیٹر سیٹ کرتی ہے یا نہیں؛ جواب میں ظاہر ہونے والا اسٹاپ سیکوئنس اسے وہیں ختم کر دیتا ہے۔

جواب کی لمبائی کے لحاظ سے ماڈل منتخب کرنا#

اس جواب سے شروع کریں جو آپ کو چاہیے۔ اگر یہ 8,192 ٹوکنز میں فٹ ہے، تو MiniMax-M2.7 (MiniMaxAI/MiniMax-M2.7) CheapTokens پر اسے سنبھال لیتا ہے۔ اس کا آؤٹ پٹ OpenRouter ریفرنس قیمت سے سستا ہے، اور یہ $0.15 (فی 1M آؤٹ پٹ ٹوکنز) پر بل کیا جاتا ہے۔ قیمت کسی بھی وقت یکساں ہے، کوئی پیک آورز نہیں، اور API OpenAI اور Anthropic کے ساتھ مطابقت رکھتی ہے۔

یہاں ہر ماڈل کے لیے موجودہ قیمت کی فہرست ہے:

ماڈل کانٹیکسٹ ان پٹ $/1M آؤٹ پٹ $/1M OpenRouter ان پٹ OpenRouter آؤٹ پٹ
GLM-5.3-Flash reasoning 390K $0.02 $0.04 $0.0413 $0.0758
DeepSeek-V4-Flash 380K $0.015 $0.10 $0.0475 $0.1568
MiniMax-M2.7 180K $0.05 $0.15 $0.30 $1.20

قیمتیں USD میں فی 1M ٹوکن ہیں۔ OpenRouter کے اعداد و شمار موازنے کے لیے دکھائے گئے ہیں اور بدل سکتے ہیں۔

اگر آپ نے ابھی تک کوئی درخواست نہیں بھیجی، تو Your first API request with CheapTokens اس پر گامزن کرتا ہے۔ ٹوکن کیا ہے اور ان پٹ اور آؤٹ پٹ الگ کیوں گنے جاتے ہیں، کے لیے What is a token in AI? دیکھیں۔

ہر ماڈل کے اینڈ پوائنٹس، ماڈل آئی ڈیز اور حدیں CheapTokens docs میں ہیں۔