using AIStudio.Provider;
using AIStudio.Settings;
using Microsoft.JSInterop;
namespace AIStudio.Chat;
///
/// The interface for any content in the chat.
///
public interface IContent
{
///
/// Do we need to wait for the remote, i.e., the AI, to process the related request?
/// Does not indicate that the stream is finished; it only indicates that we are
/// waiting for the first response, i.e., wait for the remote to pick up the request.
///
public bool InitialRemoteWait { get; set; }
///
/// Indicates whether the content is streaming right now. False, if the content is
/// either static or the stream has finished.
///
public bool IsStreaming { get; set; }
///
/// An action that is called when the content was changed during streaming.
///
public Func StreamingEvent { get; set; }
///
/// An action that is called when the streaming is done.
///
public Func StreamingDone { get; set; }
///
/// Uses the provider to create the content.
///
public Task CreateFromProviderAsync(IProvider provider, IJSRuntime jsRuntime, SettingsManager settings, Model chatModel, ChatThread chatChatThread, CancellationToken token = default);
}