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:
co-authored by
Claude Sonnet 5
parent
ea5211e05d
commit
029402a620
@@ -122,7 +122,7 @@ export const chatMessage = async (req: AuthenticatedRequest, res: Response) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
startSse(res);
|
startSse(res);
|
||||||
const aiContent = await streamOllama(messages, (delta) => sseWrite(res, { delta }), { numPredict: 800 });
|
const aiContent = await streamOllama(messages, (delta) => sseWrite(res, { delta }), { numPredict: 2048 });
|
||||||
|
|
||||||
const { data: aiMessage, error: aiMsgError } = await supabase
|
const { data: aiMessage, error: aiMsgError } = await supabase
|
||||||
.from('chat_messages')
|
.from('chat_messages')
|
||||||
@@ -207,7 +207,7 @@ export const sendThreadMessage = async (req: AuthenticatedRequest, res: Response
|
|||||||
}
|
}
|
||||||
|
|
||||||
startSse(res);
|
startSse(res);
|
||||||
const aiContent = await streamOllama(messages, (delta) => sseWrite(res, { delta }), { numPredict: 800 });
|
const aiContent = await streamOllama(messages, (delta) => sseWrite(res, { delta }), { numPredict: 2048 });
|
||||||
|
|
||||||
const { data: aiMessage, error: aiMsgError } = await supabase
|
const { data: aiMessage, error: aiMsgError } = await supabase
|
||||||
.from('thread_messages')
|
.from('thread_messages')
|
||||||
|
|||||||
+10
-1
@@ -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ıç
|
// 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.
|
// gecikmesi yaşar) worker'ı bu süre boyunca bellekte tutmasını istiyoruz.
|
||||||
const KEEP_ALIVE = '30m';
|
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_TIMEOUT_MS = 90_000;
|
||||||
const DEFAULT_STALL_TIMEOUT_MS = 60_000;
|
const DEFAULT_STALL_TIMEOUT_MS = 60_000;
|
||||||
|
|
||||||
@@ -104,6 +107,12 @@ export async function streamOllama(
|
|||||||
full += delta;
|
full += delta;
|
||||||
onToken(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) {
|
while (true) {
|
||||||
|
|||||||
Reference in New Issue
Block a user