Session-Aware ChatHistoryProvider
Uses ProviderSessionState<TState> — per-session state stored in AgentSession.StateBag:
public class FileChatHistoryProvider : ChatHistoryProvider
{
private readonly ProviderSessionState<SessionState> _sessionState;
public FileChatHistoryProvider(string directory, string? existingSessionId = null)
{
_sessionState = new ProviderSessionState<SessionState>(_ => new SessionState(
existingSessionId ?? Guid.NewGuid().ToString("N")[..8]),nameof(FileChatHistoryProvider));
}
protected override ValueTask<IEnumerable<ChatMessage>> ProvideChatHistoryAsync(
InvokingContext context, CancellationToken cancellationToken = default)
{
var state = _sessionState.GetOrInitializeState(context.Session);
var path = Path.Combine(_directory, $"{state.SessionId}.json");
}
public record SessionState(string SessionId);
}