30 lines
1.3 KiB
JavaScript
30 lines
1.3 KiB
JavaScript
/**
|
||
* Gerçek AI şartname analizi istemcisi (backend /api/ai üzerinden).
|
||
*/
|
||
import { getToken } from './auth.js';
|
||
import {runDurableAiJob} from './aiJobs.js';
|
||
|
||
export async function getAiConfig() {
|
||
try {
|
||
const res = await fetch('/api/ai/config');
|
||
if (!res.ok) return { configured: false, providers: [] };
|
||
return await res.json();
|
||
} catch {
|
||
return { configured: false, providers: [] };
|
||
}
|
||
}
|
||
|
||
export async function analyzeSpecText(input,{onProgress}={}) {
|
||
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,onProgress});
|
||
}
|
||
|
||
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', { timeZone: 'Europe/Istanbul' })};
|
||
}
|