vtcode_core/llm/
client.rs1use super::provider::LLMError;
2use super::providers::{
3 AnthropicProvider, GeminiProvider, OpenAIProvider, OpenRouterProvider, XAIProvider,
4};
5use super::types::{BackendKind, LLMResponse};
6use crate::config::models::{ModelId, Provider};
7use async_trait::async_trait;
8
9#[async_trait]
11pub trait LLMClient: Send + Sync {
12 async fn generate(&mut self, prompt: &str) -> Result<LLMResponse, LLMError>;
13 fn backend_kind(&self) -> BackendKind;
14 fn model_id(&self) -> &str;
15}
16
17pub type AnyClient = Box<dyn LLMClient>;
19
20pub fn make_client(api_key: String, model: ModelId) -> AnyClient {
22 match model.provider() {
23 Provider::Gemini => Box::new(GeminiProvider::with_model(
24 api_key,
25 model.as_str().to_string(),
26 )),
27 Provider::OpenAI => Box::new(OpenAIProvider::with_model(
28 api_key,
29 model.as_str().to_string(),
30 )),
31 Provider::Anthropic => Box::new(AnthropicProvider::new(api_key)),
32 Provider::OpenRouter => Box::new(OpenRouterProvider::with_model(
33 api_key,
34 model.as_str().to_string(),
35 )),
36 Provider::XAI => Box::new(XAIProvider::with_model(api_key, model.as_str().to_string())),
37 }
38}