llmoxide 0.1.0

Provider-agnostic Rust SDK for OpenAI, Anthropic, Gemini, and Ollama (streaming + tools)
Documentation
use std::borrow::Cow;

pub type Result<T> = std::result::Result<T, Error>;

#[derive(Debug)]
pub enum Error {
    InvalidInput(Cow<'static, str>),
    Http(reqwest::Error),
    Json(serde_json::Error),
    Api {
        provider: crate::types::Provider,
        status: u16,
        body: String,
    },
}

impl std::fmt::Display for Error {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Error::InvalidInput(msg) => write!(f, "invalid input: {msg}"),
            Error::Http(e) => write!(f, "http error: {e}"),
            Error::Json(e) => write!(f, "json error: {e}"),
            Error::Api {
                provider,
                status,
                body,
            } => write!(f, "{provider:?} api error ({status}): {body}"),
        }
    }
}

impl std::error::Error for Error {}

impl From<reqwest::Error> for Error {
    fn from(value: reqwest::Error) -> Self {
        Self::Http(value)
    }
}

impl From<serde_json::Error> for Error {
    fn from(value: serde_json::Error) -> Self {
        Self::Json(value)
    }
}