Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

57 lines
2.0KB

  1. using System.Text;
  2. using System.Text.Json;
  3. using ToolsServices;
  4. namespace Services.Ollama
  5. {
  6. public static class EmbeddingService
  7. {
  8. public static async Task<(bool, float[]?)> GetEmbeddingAsync(string text, bool isOnDemand)
  9. {
  10. LoggerService.LogDebug("EmbeddingService.GetEmbeddingAsync");
  11. try
  12. {
  13. ParametresOllamaService? ollama = OllamaService.LoadParametres();
  14. if (ollama == null)
  15. {
  16. var msg = "Erreur de chargement des paramètres Ollama.";
  17. LoggerService.LogWarning(msg);
  18. return (false, null);
  19. }
  20. var url = "";
  21. if (isOnDemand)
  22. url = $"{ollama.Ollama_URL}/api/embeddings";
  23. else
  24. url = $"{ollama.Ollama_Batch_URL}/api/embeddings";
  25. var request = new
  26. {
  27. model = "nomic-embed-text",
  28. prompt = text,
  29. stream = false
  30. };
  31. HttpClient httpClient = new();
  32. var json = JsonSerializer.Serialize(request);
  33. var response = await httpClient.PostAsync(url,
  34. new StringContent(json, Encoding.UTF8, "application/json"));
  35. response.EnsureSuccessStatusCode();
  36. var result = await response.Content.ReadAsStringAsync();
  37. using var doc = JsonDocument.Parse(result);
  38. var retour = doc.RootElement
  39. .GetProperty("embedding")
  40. .EnumerateArray()
  41. .Select(e => e.GetSingle())
  42. .ToArray();
  43. return (true, retour);
  44. }
  45. catch (Exception ex)
  46. {
  47. LoggerService.LogError($"Erreur lors de la récupération de l'embedding : {ex.Message}");
  48. return (false, null);
  49. }
  50. }
  51. }
  52. }