54 lines
1.7 KiB
C#
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; }
|
|
}
|