#[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),
}