Persist general specification analysis and expose saved results

This commit is contained in:
2026-09-06 12:44:37 +03:00
parent ca0ed73242
commit bfef768974
11 changed files with 122 additions and 42 deletions
+14 -16
View File
@@ -1,7 +1,8 @@
/**
* Gerçek AI şartname analizi istemcisi (backend /api/ai üzerinden).
*/
import { getToken } from './auth';
import { getToken } from './auth.js';
import {runDurableAiJob} from './aiJobs.js';
export async function getAiConfig() {
try {
@@ -13,19 +14,16 @@ export async function getAiConfig() {
}
}
export async function analyzeSpecText({ text, fileName, tender, chain, mode, extraction, reviewedSource }) {
const res = await fetch('/api/ai/analyze', {
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${getToken()}` },
body: JSON.stringify({ text, fileName, tender, chain, mode, extraction, reviewedSource }),
});
const data = await res.json().catch(() => ({}));
if (!data.success) {
const proxyMesaj = {
413: 'Doküman metni sunucu sınırını aşıyor; daha küçük bir dosya veya yalnızca ilgili sayfaları deneyin.',
504: 'Analiz zaman aşımına uğradı; tekrar deneyin (derin analiz 1-2 dk sürebilir).',
}[res.status];
throw new Error(data.error || proxyMesaj || `Analiz başarısız (HTTP ${res.status})`);
}
return data;
export async function analyzeSpecText(input) {
const session=getToken();
const check=()=>{if(getToken()!==session)throw new Error('Oturum değişti; kayıtlı analiz bu hesaba aktarılmadı.');};
return runDurableAiJob('analiz',input,{check});
}
export function analysisView(data,input) {
if(data?.success!==true || !data.result || typeof data.result!=='object' || Array.isArray(data.result) || !data.model?.label || !data.model?.provider || !Number.isFinite(Date.parse(data.analyzedAt)))throw new Error('Kayıtlı analiz sonucu geçersiz.');
return {...data.result,tenderKey:input.tender?.ikn || input.tender?.id || null,
mode:data.mode || (input.mode==='derin'?'derin':'standart'),fileName:input.fileName,
model:`${data.model.label} (${data.model.provider})`,modelId:data.model.model,
attempts:data.attempts,analyzedAt:new Date(data.analyzedAt).toLocaleString('tr-TR')};
}