in src/WebJobs.Extensions.OpenAI/Search/SearchableDocumentJsonConverter.cs [14:77]
public override SearchableDocument Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using JsonDocument jsonDocument = JsonDocument.ParseValue(ref reader);
// Properties for SearchableDocument
IList<string> input = new List<string>();
OpenAIEmbeddingCollection? embeddings = null;
int count;
string title = string.Empty;
string connectionName = string.Empty;
string collectionName = string.Empty;
foreach (JsonProperty item in jsonDocument.RootElement.EnumerateObject())
{
if (item.NameEquals("embeddingsContext"u8))
{
foreach (JsonProperty embeddingContextItem in item.Value.EnumerateObject())
{
if (embeddingContextItem.NameEquals("request"u8))
{
// Parse the array of string inputs
input = new List<string>();
foreach (JsonElement element in embeddingContextItem.Value.EnumerateArray())
{
input.Add(element.GetString() ?? string.Empty);
}
}
if (embeddingContextItem.NameEquals("response"u8))
{
embeddings = ModelReaderWriter.Read<OpenAIEmbeddingCollection>(BinaryData.FromString(embeddingContextItem.Value.GetRawText()))!;
}
if (embeddingContextItem.NameEquals("count"u8))
{
count = embeddingContextItem.Value.GetInt32();
}
}
}
if (item.NameEquals("connectionInfo"u8))
{
foreach (JsonProperty connectionInfoItem in item.Value.EnumerateObject())
{
if (connectionInfoItem.NameEquals("connectionName"u8))
{
connectionName = connectionInfoItem.Value.GetString() ?? string.Empty;
}
if (connectionInfoItem.NameEquals("collectionName"u8))
{
collectionName = connectionInfoItem.Value.GetString() ?? string.Empty;
}
}
}
if (item.NameEquals("title"u8))
{
title = item.Value.GetString() ?? string.Empty;
}
}
SearchableDocument searchableDocument = new SearchableDocument(title)
{
Embeddings = new EmbeddingsContext(input, embeddings),
ConnectionInfo = new ConnectionInfo(connectionName, collectionName),
};
return searchableDocument;
}