using AI.DeepSeekR1.Metier; using Microsoft.Extensions.AI; using System.Text; using System.Text.Json; using System.Text.RegularExpressions; namespace AI.DeepSeekR1; public class AiRunner { private readonly IChatClient _chatClient; private readonly string PromptReclamation = @"Tu es un assistant et vas devoir aider à interpréter une demande d'un client d'une compagnie d'assurance. Tu renverras les résultats de ton analyse au format JSON en respectant la structure C# ci-dessous, dont tu y trouveras dans le code la description des règles pour chaque champ afin de t'aider à produire le meilleur résultat. Tu dois insérer les balises <JSON> et </JSON> pour délimiter le JSON à renvoyer. Pour les propriétés enums (TypeService, CategorieProbleme et Priorisation) tu dois absolument renvoyer leur valeur entière."; private string ContenuFichiersTechniques { get; set; } public AiRunner(IChatClient chatClient) { _chatClient = chatClient; } public async Task<Reclamation?> DeterminerReclamationAsync(string question) { var prompt = await GetReclamationPromptAsync(question); var response = await _chatClient.CompleteAsync(prompt); Console.WriteLine($"\n> REPONSE :\n" + response); var json = ExtractJsonContent(response.ToString()); Console.WriteLine($"\n> JSON :\n" + json); return !string.IsNullOrEmpty(json) ? JsonSerializer.Deserialize<Reclamation>(json) : null; } private async Task<string> GetReclamationPromptAsync(string question) { return PromptReclamation + Environment.NewLine + "Fichiers techniques : " + Environment.NewLine + await GetContenuFichiersTechniquesAsync() + Environment.NewLine + "A partir d'ici débute le message de réclamation reçu : " + Environment.NewLine + question; } private async Task<string> GetContenuFichiersTechniquesAsync() { //Les fichiers techniques sont automatiquement chargés, et une seule fois if (string.IsNullOrEmpty(ContenuFichiersTechniques)) { var promptFiles = new StringBuilder(); foreach (var file in Directory.GetFiles("../../../Metier")) { var code = await File.ReadAllTextAsync(file); promptFiles.AppendLine(code); } ContenuFichiersTechniques = promptFiles.ToString(); } return ContenuFichiersTechniques; } private static string? ExtractJsonContent(string input) { var pattern = @"<JSON>(.*?)</JSON>"; var match = Regex.Match(input, pattern, RegexOptions.Singleline); return match.Success ? match.Groups[1].Value.Trim() : null; } }