/// Extract module - used for structured outputs or tool calling
/// Chat module - used for simple prompting
/// Core Provider trait
///
/// Essentially the core trait, all LLM providers must at
/// least implement this once, and create it's error types
/// Ideally, this would include Network/HTTPS requests and
/// Provider specific errors.