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 et 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 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(json)
: null;
}
private async Task 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 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 = @"(.*?)";
var match = Regex.Match(input, pattern, RegexOptions.Singleline);
return match.Success
? match.Groups[1].Value.Trim()
: null;
}
}