using System.Text; using System.Text.Json; using ToolsServices; namespace Services.Ollama { public static class EmbeddingService { public static async Task<(bool, float[]?)> GetEmbeddingAsync(string text, bool isOnDemand) { LoggerService.LogDebug("EmbeddingService.GetEmbeddingAsync"); try { ParametresOllamaService? ollama = OllamaService.LoadParametres(); if (ollama == null) { var msg = "Erreur de chargement des paramètres Ollama."; LoggerService.LogWarning(msg); return (false, null); } var url = ""; if (isOnDemand) url = $"{ollama.Ollama_URL}/api/embeddings"; else url = $"{ollama.Ollama_Batch_URL}/api/embeddings"; var request = new { model = "nomic-embed-text", prompt = text, stream = false }; HttpClient httpClient = new(); var json = JsonSerializer.Serialize(request); var response = await httpClient.PostAsync(url, new StringContent(json, Encoding.UTF8, "application/json")); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); using var doc = JsonDocument.Parse(result); var retour = doc.RootElement .GetProperty("embedding") .EnumerateArray() .Select(e => e.GetSingle()) .ToArray(); return (true, retour); } catch (Exception ex) { LoggerService.LogError($"Erreur lors de la récupération de l'embedding : {ex.Message}"); return (false, null); } } } }