fix: raise num_predict for interactive chat to stop mid-sentence cutoffs

800 token sınırı çok düşüktü — çok bölümlü hukuki cevaplar (kira feshi,
tazminat hesabı gibi) bu sınıra çarpıp cümlenin ortasında kesiliyordu.
Varsayılan ve chatMessage/sendThreadMessage'ın kullandığı num_predict
2048'e çıkarıldı. Ayrıca Ollama done_reason:"length" döndürdüğünde
(yanıt sınıra çarpıp kesildiğinde) sunucu loglarına uyarı yazılıyor.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
mstfyldz
2026-08-10 00:35:00 +03:00
co-authored by Claude Sonnet 5
parent ea5211e05d
commit 029402a620
2 changed files with 12 additions and 3 deletions
+10 -1
View File
@@ -6,7 +6,10 @@ export interface ChatMsg { role: string; content: string; }
// davranışı: 5 dakika kullanılmazsa boşalır, sıradaki istek soğuk başlangıç
// gecikmesi yaşar) worker'ı bu süre boyunca bellekte tutmasını istiyoruz.
const KEEP_ALIVE = '30m';
const DEFAULT_NUM_PREDICT = 800;
// 800 pratikte çok düşük çıktı — çok bölümlü hukuki cevaplar (kira feshi, tazminat
// hesabı gibi) bu sınıra çarpıp cümlenin ortasında kesiliyordu. 2048 hem çoğu cevabı
// tam bitirmeye yetiyor hem de modelin sonsuz uzayıp gitmesine karşı hâlâ bir üst sınır.
const DEFAULT_NUM_PREDICT = 2048;
const DEFAULT_TIMEOUT_MS = 90_000;
const DEFAULT_STALL_TIMEOUT_MS = 60_000;
@@ -104,6 +107,12 @@ export async function streamOllama(
full += delta;
onToken(delta);
}
// Ollama son satırda done_reason:"length" döndürürse yanıt num_predict
// sınırına çarpıp yarım kesilmiş demektir — sessizce geçmek yerine loglayıp
// ileride benzer bir "cevaplar yarım kalıyor" şikayetini hızlı teşhis edebilelim.
if (json.done && json.done_reason === 'length') {
console.warn('[aiClient] Yanıt num_predict sınırına çarpıp kesildi.');
}
};
while (true) {