SeemGen/Services/OpenAIEmbeddingService.cs

54 lines
1.7 KiB
C#

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
public class OpenAIEmbeddingService
{
private readonly string _apiKey = "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";
private readonly HttpClient _httpClient;
public OpenAIEmbeddingService()
{
_httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Clear();
_httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {_apiKey}");
}
public async Task<float[]> GenerateEmbeddingAsync(string text)
{
var url = "https://api.openai.com/v1/embeddings";
var payload = new
{
//model = "text-embedding-3-small",
model = "text-embedding-ada-002",
input = text
};
var content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<OpenAIEmbeddingResponse>(responseContent);
return result.Data[0].Embedding;
}
else
{
throw new Exception($"Failed to generate embedding: {response.StatusCode}");
}
}
}
public class OpenAIEmbeddingResponse
{
public EmbeddingData[] Data { get; set; }
}
public class EmbeddingData
{
public float[] Embedding { get; set; }
}