use async_trait::async_trait;
use super::types::{LlmRequest, LlmResponse};
use crate::error::LlmError;
#[derive(Debug, Clone)]
pub enum ProviderAvailability {
Available,
Unavailable { reason: String },
}
#[async_trait]
pub trait LlmProvider: Send + Sync {
async fn invoke(&self, request: LlmRequest) -> Result<LlmResponse, LlmError>;
async fn check_availability(&self) -> ProviderAvailability;
fn name(&self) -> &str;
}