feat: analyze complete long documents in bounded source parts

This commit is contained in:
2026-09-06 08:58:54 +03:00
parent 90d85060f2
commit 0ae828163a
5 changed files with 98 additions and 2 deletions
+9 -1
View File
@@ -1,3 +1,4 @@
import { analyzeInParts } from './analysis-parts.mjs';
import { qualifyAnalysis } from './analysis-quality.mjs';
/**
* Gerçek AI şartname analizi — OpenRouter öncelikli, çoklu sağlayıcı fallback.
@@ -316,7 +317,14 @@ function kesikJsonOnar(s) {
}
/** Zinciri sırayla dener; ilk başarılı sonucu döndürür. */
export async function analyzeSpec({ text, fileName, tender, chain, systemOverride, mode }) {
export async function analyzeSpec({ text, fileName, tender, chain, systemOverride, mode, _singlePart = false }) {
if (!_singlePart && String(text || '').length > 24000) {
return analyzeInParts({text,fileName,tender,mode}, part => analyzeSpec({
text:part.text,fileName:`${fileName || 'Doküman'} — bölüm ${part.index+1}`,
tender:tender ? {...tender,items:[]} : undefined,chain,mode,_singlePart:true,
systemOverride:(systemOverride || (mode === 'derin' ? DERIN_SYSTEM_PROMPT : SYSTEM_PROMPT)) + '\nBu metin büyük dokümanın bir bölümüdür. Yalnız bu bölümde görülen koşulları çıkar; bu bölümde bulunmayan şartın bütün dokümanda bulunmadığı sonucunu çıkarma.',
}));
}
const derin = mode === 'derin';
// Ücretli yedek: Gemini Flash her zaman zincirin sonunda. Panelde seçilen
// modeller (ör. ücretsiz/limitli olanlar) tıkanınca analiz boş kalmasın;