use crate::error::{Error, Result};
use crate::types::{GenerateRequest, GenerateResponse, GenerateStream};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ProviderKind {
OpenAI,
Anthropic,
Google,
}
impl ProviderKind {
pub fn as_str(&self) -> &str {
match self {
Self::OpenAI => "openai",
Self::Anthropic => "anthropic",
Self::Google => "google",
}
}
}
impl std::str::FromStr for ProviderKind {
type Err = Error;
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"openai" => Ok(Self::OpenAI),
"anthropic" => Ok(Self::Anthropic),
"google" | "gemini" => Ok(Self::Google),
_ => Err(Error::UnknownProvider(s.to_string())),
}
}
}
pub struct ProviderDispatcher;
impl ProviderDispatcher {
pub async fn generate(
_kind: ProviderKind,
_request: GenerateRequest,
) -> Result<GenerateResponse> {
Err(Error::Other("Not implemented yet".to_string()))
}
pub async fn stream(_kind: ProviderKind, _request: GenerateRequest) -> Result<GenerateStream> {
Err(Error::Other("Not implemented yet".to_string()))
}
}