use super::error::LlmError;
use super::http::HttpClient;
use super::models::{Message, MessageOptions, StreamEvent};
use futures::Stream;
use std::future::Future;
use std::pin::Pin;
pub type StreamEventStream = Pin<Box<dyn Stream<Item = Result<StreamEvent, LlmError>> + Send>>;
pub type StreamMsgFuture =
Pin<Box<dyn Future<Output = Result<StreamEventStream, LlmError>> + Send>>;
pub trait LlmProvider {
fn send_msg(
&self,
client: &HttpClient,
messages: &[Message],
options: &MessageOptions,
) -> Pin<Box<dyn Future<Output = Result<Message, LlmError>> + Send>>;
fn send_msg_stream(
&self,
_client: &HttpClient,
_messages: &[Message],
_options: &MessageOptions,
) -> StreamMsgFuture {
Box::pin(async {
Err(LlmError::new(
"NOT_IMPLEMENTED",
"Streaming not supported for this provider",
))
})
}
}