use futures::future::BoxFuture;
use request::{CompletionRequest, CompletionResponse};
use thiserror::Error;
pub mod completion;
pub mod provider;
pub mod request;
pub trait Model {
type RawCompletionResponse;
fn completion(
&self,
request: CompletionRequest,
) -> BoxFuture<Result<CompletionResponse<Self::RawCompletionResponse>, CompletionError>>;
}
#[derive(Debug, Error)]
pub enum CompletionError {
#[error("HttpError: {0}")]
Http(#[from] reqwest::Error),
#[error("JsonError: {0}")]
Json(#[from] serde_json::Error),
#[error("RequestError: {0}")]
Request(#[from] Box<dyn std::error::Error + Send + Sync + 'static>),
#[error("ResponseError: {0}")]
Response(String),
#[error("ProviderError: {0}")]
Provider(String),
#[error("OtherError: {0}")]
Other(String),
}