Update geminiService.ts

This commit is contained in:
fcarraUniSa
2026-02-17 10:59:17 +01:00
committed by GitHub
parent b7944a8cc0
commit ebcf4096fe

View File

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