public override SearchableDocument Read()

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