EmbeddingService.cs•1.76 kB
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System.Text;
using System.Text.Json;
using ToolSelection.Models;
namespace ToolSelection.Services;
public class EmbeddingService(HttpClient httpClient, string endpoint, string apiKey)
{
private readonly HttpClient _httpClient = httpClient;
private readonly string _endpoint = endpoint;
private readonly string _apiKey = apiKey;
public async Task<float[]> CreateEmbeddingsAsync(string input)
{
var requestBody = new EmbeddingRequest
{
Input = new[] { input }
};
var json = JsonSerializer.Serialize(requestBody, SourceGenerationContext.Default.EmbeddingRequest);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var request = new HttpRequestMessage(HttpMethod.Post, _endpoint)
{
Content = content
};
request.Headers.Add("api-key", _apiKey);
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
var embeddingResponse = JsonSerializer.Deserialize(responseContent, SourceGenerationContext.Default.EmbeddingResponse);
if (embeddingResponse?.Error != null)
{
throw new InvalidOperationException($"API error: {embeddingResponse.Error.Type} - {embeddingResponse.Error.Message}");
}
if (embeddingResponse?.Data == null || embeddingResponse.Data.Length == 0)
{
throw new InvalidOperationException($"No embedding data returned from API. Response: {responseContent}");
}
return embeddingResponse.Data[0].Embedding;
}
}