public async Task GetStateAsync()

in src/WebJobs.Extensions.OpenAI/Assistants/AssistantService.cs [135:177]


    public async Task<AssistantState> GetStateAsync(AssistantQueryAttribute assistantQuery, CancellationToken cancellationToken)
    {
        string id = assistantQuery.Id;
        string timestampString = Uri.UnescapeDataString(assistantQuery.TimestampUtc);
        if (!DateTime.TryParse(timestampString, out DateTime timestamp))
        {
            throw new ArgumentException($"Invalid timestamp '{assistantQuery.TimestampUtc}'");
        }

        DateTime afterUtc = timestamp.ToUniversalTime();
        this.logger.LogInformation(
            "Reading state for assistant entity '{Id}' and getting chat messages after {Timestamp}",
            id,
            afterUtc.ToString("o"));

        TableClient tableClient = this.GetOrCreateTableClient(assistantQuery.ChatStorageConnectionSetting, assistantQuery.CollectionName);

        InternalChatState? chatState = await this.LoadChatStateAsync(id, tableClient, cancellationToken);
        if (chatState is null)
        {
            this.logger.LogWarning("No assistant exists with ID = '{Id}'", id);
            return new AssistantState(id, false, default, default, 0, 0, Array.Empty<AssistantMessage>());
        }

        List<ChatMessageTableEntity> filteredChatMessages = chatState.Messages
            .Where(msg => msg.CreatedAt > afterUtc)
            .ToList();

        this.logger.LogInformation(
            "Returning {Count}/{Total} chat messages from entity '{Id}'",
            filteredChatMessages.Count,
            chatState.Metadata.TotalMessages, id);

        AssistantState state = new(
            id,
            true,
            chatState.Metadata.CreatedAt,
            chatState.Metadata.LastUpdatedAt,
            chatState.Metadata.TotalMessages,
            chatState.Metadata.TotalTokens,
            filteredChatMessages.Select(msg => new AssistantMessage(msg.Content, msg.Role, msg.ToolCallsString)).ToList());
        return state;
    }