Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Errors

LatchLM uses a unified error type to simplify error handling across all providers and models.

Error Type

All fallible operations in LatchLM return a Result<T, Error>, where Error is an enum defined in the core crate. This makes it easy to handle errors in a consistent way, regardless of the provider or model you are using.

Error Variants

The main error variants are:

  • RequestError: Occurs when an HTTP request fails (e.g., network issues, timeouts, invalid URLs). Wraps a reqwest::Error.

  • ApiError: Represents an error returned by the API provider itself, such as invalid API keys, quota exceeded, or unsupported operations. Contains the HTTP status code and a message.

  • ParseError: Indicates a failure to parse the response from the provider (e.g., invalid JSON). Wraps a serde_json::Error.

  • InvalidModelError: Returned when an invalid or unsupported model name is used

Example

#![allow(unused)]
fn main() {
use latchlm::{AiProvider, AiModel, AiRequest, Error};

async fn call_model (
    provider: &dyn AiProvider,
    model: &dyn AiModel,
    prompt: &str,
) -> Result<String, Error> {
    let request = AiRequest { text: prompt.to_string() };
    let response = provider.send_request(model, request).await?;
    Ok(response.text)
}
}

Handling Errors

You can match on the Error type to handle different error cases

#![allow(unused)]
fn main() {
match result {
    Ok(response) => println!("AI response: {}", response.text),
    Err(Error::RequestError(e)) => eprintln!("Network error: {e}"),
    Err(Error::ApiError { status, message }) => {
        eprintln!("API error (status {status}): {message}")
    },
    Err(Error::ParseError(e)) => eprintln!("Failed to parse response: {e}"),
    Err(Error::InvalidModelError(name)) => eprintln!("Invalid model: {name}"),
}
}

Extensibility

The Error enum is marked as #[non_exhaustive], which means additional variants may be added in the future.