#[cfg(feature = "openai")]
use async_openai::error::OpenAIError;
#[cfg(feature = "bedrock")]
use aws_sdk_bedrockruntime::error::SdkError;
#[cfg(feature = "bedrock")]
use aws_sdk_bedrockruntime::operation::converse::ConverseError;
#[cfg(feature = "bedrock")]
use aws_sdk_bedrockruntime::operation::invoke_model::InvokeModelError;
#[derive(Debug, thiserror::Error)]
pub enum AnchorChainError {
    #[cfg(feature = "openai")]
    #[error("OpenAI error: {0}")]
    OpenAIError(#[from] OpenAIError),
    #[cfg(feature = "bedrock")]
    #[error("Bedrock error: {0}")]
    BedrockError(#[from] SdkError<InvokeModelError>),
    #[cfg(feature = "bedrock")]
    #[error("Bedrock Converse Error: {0}")]
    BedrockConverse(#[from] SdkError<ConverseError>),
    #[error("error constructing or rendering Tera template: {0}")]
    TeraTemplateError(#[from] tera::Error),
    #[error("no response returned from the model")]
    EmptyResponseError,
    #[error("error processing request: {0}")]
    RequestError(#[from] serde_json::Error),
    #[cfg(feature = "opensearch")]
    #[error("OpenSearch error: {0}")]
    OpenSearchError(#[from] opensearch::Error),
    #[cfg(feature = "opensearch")]
    #[error("OpenSearch returned error: {0}")]
    OpenSearchInternalError(String),
    #[error("Error parsing input: {0}")]
    ParseError(String),
    #[error("invalid input: {0}")]
    InvalidInputError(String),
    #[error("error processing model response: {0}")]
    ModelError(String),
    #[cfg(feature = "ollama")]
    #[error("reqwest error: {0}")]
    ReqwestError(#[from] reqwest::Error),
}