diff --git a/services/geminiService.ts b/services/geminiService.ts index 5a66ab6..411c718 100644 --- a/services/geminiService.ts +++ b/services/geminiService.ts @@ -107,6 +107,7 @@ export const getSupportResponse = async ( /** * Agent 2: Knowledge Extraction + * Returns an ARRAY of suggested articles. */ export const generateNewKBArticle = async ( apiKey: string, @@ -114,7 +115,7 @@ export const generateNewKBArticle = async ( existingArticles: KBArticle[], provider: AiProvider = AiProvider.GEMINI, model: string = 'gemini-3-pro-preview' -): Promise<{ title: string; content: string; category: string } | null> => { +): Promise | null> => { if (!apiKey) return null; // Filter only resolved tickets @@ -132,7 +133,7 @@ export const generateNewKBArticle = async ( const systemPrompt = ` Sei un Knowledge Manager AI esperto. - Analizza i seguenti ticket risolti e confrontali con gli articoli esistenti nella Knowledge Base. + Analizza TUTTI i seguenti ticket risolti e confrontali con gli articoli esistenti nella Knowledge Base. ARTICOLI ESISTENTI: ${existingTitles} @@ -140,17 +141,21 @@ export const generateNewKBArticle = async ( ${transcripts} OBIETTIVO: - 1. Identifica un problema ricorrente o una soluzione tecnica presente nei ticket risolti MA NON coperta dagli articoli esistenti. - 2. Se trovi una lacuna, scrivi un NUOVO articolo di Knowledge Base per colmarla. - 3. Restituisci il risultato ESCLUSIVAMENTE in formato JSON valido. Non aggiungere markdown code blocks. + 1. Identifica TUTTI i problemi ricorrenti o le soluzioni tecniche presenti nei ticket risolti MA NON coperti dagli articoli esistenti. + 2. Per ogni lacuna trovata, scrivi un NUOVO articolo di Knowledge Base per colmarla. + 3. Restituisci il risultato ESCLUSIVAMENTE come un ARRAY JSON di oggetti. Non aggiungere markdown code blocks. - SCHEMA JSON RICHIESTO: - { - "foundGap": boolean, - "title": "Titolo del nuovo articolo", - "content": "Contenuto dettagliato in formato Markdown", - "category": "Categoria suggerita" - } + SCHEMA JSON RICHIESTO (ARRAY): + [ + { + "title": "Titolo del nuovo articolo", + "content": "Contenuto dettagliato in formato Markdown (usa elenchi puntati per istruzioni)", + "category": "Categoria suggerita" + }, + ... + ] + + Se non trovi lacune significative, restituisci un array vuoto []. `; try { @@ -171,19 +176,15 @@ export const generateNewKBArticle = async ( if (!rawText) return null; - // Clean markdown if present (sometimes models add ```json ... ```) - // We escape the backticks in the regex to ensure safety in all environments + // Clean markdown if present const cleanedText = rawText.replace(/\`\`\`json/g, '').replace(/\`\`\`/g, '').trim(); const result = JSON.parse(cleanedText); - if (result.foundGap) { - return { - title: result.title, - content: result.content, - category: result.category - }; + + if (Array.isArray(result) && result.length > 0) { + return result; } - return null; + return []; } catch (error) { console.error("Knowledge Agent Error:", error);