Files
ihaleist/server/source-requirements.mjs

31 lines
1.9 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {createHash} from 'node:crypto';
import {splitAnalysisText} from './analysis-parts.mjs';
/** Scan every source part, accepting only literal requirements located in that part. */
export async function sourceRequirements(text,run,{signal}={}) {
const parts=splitAnalysisText(text,6000),results=new Map();
for(let start=0;start<parts.length;start+=2) {
signal?.throwIfAborted();
await Promise.all(parts.slice(start,start+2).map(async part=>{
const result=await run(part,parts.length);
signal?.throwIfAborted();
if(!Array.isArray(result?.requirements))throw new Error('Kaynak şartları geçerli liste olarak çıkarılamadı. Denetim tamamlanmadı.');
const rows=[];
for(const entry of result.requirements) {
const quote=entry?.quote;
if(typeof quote!=='string' || quote.trim().length<15 || !part.text.includes(quote))
throw new Error('Çıkarılan şartın kaynak alıntısı doğrulanamadı. Denetim tamamlanmadı.');
const offset=part.text.indexOf(quote);
rows.push({quote,part:part.index+1,start:part.start+offset,end:part.start+offset+quote.length});
}
results.set(part.index,rows);
}));
}
signal?.throwIfAborted();
const evidence=parts.flatMap(part=>results.get(part.index));
const unique=[...new Map(evidence.map(row=>[JSON.stringify([row.start,row.end]),row])).values()];
return {requirements:unique.map(row=>`Kaynak bölüm ${row.part} (karakter ${row.start+1}–${row.end}): ${row.quote}`),
sourceReview:{sourceHash:createHash('sha256').update(text).digest('hex'),sourceCharacters:text.length,scannedParts:parts.length,selectedRequirements:unique.length,evidence:unique},
scope:'Kaynak metnin tüm parçaları şart seçimi için tarandı; denetim, seçilen gerçek alıntılar ve verilen kalem/koşul listesiyle sınırlıdır. AI şart atlayabilir; parça sınırları, bağlam ve çelişen hükümler resmi dokümanda ayrıca kontrol edilmelidir.'};
}