fix: Ollama KEEP_ALIVE=-1 ve AbortError mesaj netliği, callAiModelRaw'a opsiyonel timeoutMs

KEEP_ALIVE '30m' -> -1: GPU'da bolca boş VRAM var, modeli sürekli bellekte
tutmanın maliyeti yok, 30dk sınırı gereksiz soğuk-başlangıç gecikmelerine
sebep oluyordu (bkz. 2026-08-14 log: 44GB boş / 17.5GB kullanılan).
This commit is contained in:
Mustafa Yildiz
2026-08-17 00:46:10 +03:00
parent 2324cb78a6
commit 66a3960d90
2 changed files with 13 additions and 3 deletions
+2 -2
View File
@@ -150,12 +150,12 @@ async function callAiModel(systemPrompt: string, userText: string): Promise<{ re
return { resultJson, aiModel };
}
export async function callAiModelRaw(systemPrompt: string, userText: string, numPredict = 1500): Promise<{ aiContent: string; aiModel: string }> {
export async function callAiModelRaw(systemPrompt: string, userText: string, numPredict = 1500, timeoutMs?: number): Promise<{ aiContent: string; aiModel: string }> {
const { aiModel } = getAiConfig();
const aiContent = await callOllama([
{ role: 'system', content: systemPrompt },
{ role: 'user', content: userText.substring(0, 15000) },
], { numPredict });
], { numPredict, timeoutMs });
return { aiContent, aiModel };
}
+11 -1
View File
@@ -6,7 +6,12 @@ export interface ChatMsg { role: string; content: string; }
// Model her istekte bellekten atılıp yeniden yüklenmesin diye (varsayılan Ollama
// 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';
// -1: Ollama'ya özel değer, "asla otomatik atma" anlamına gelir — sadece Ollama
// sunucusu yeniden başlarsa model tekrar yüklenir. GPU'da bolca boş VRAM var
// (bkz. 2026-08-14 log: 44GB boş / 17.5GB kullanılan), bu yüzden modeli sürekli
// bellekte tutmanın maliyeti yok; 30dk'lık sınır sadece gereksiz soğuk başlangıç
// gecikmelerine (~90sn, bazen backend timeout'undan uzun) sebep oluyordu.
const KEEP_ALIVE = -1;
// 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.
@@ -55,6 +60,11 @@ export async function callOllama(
}
const data = await response.json();
return (data.message?.content || '').toString().trim();
} catch (err: any) {
if (err?.name === 'AbortError' || (err?.message && String(err.message).toLowerCase().includes('aborted'))) {
throw new Error('Yapay zeka yanıt verme süresi aşıldı (Zaman Aşımı). Lütfen tekrar deneyin.');
}
throw err;
} finally {
clearTimeout(timeoutId);
}