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; }
|
|
}
|