An AI agent built to do Ralph loops - plan mode for planning and ralph mode for implementing.
at main 44 lines 1.6 kB view raw
1use crate::config::{Config, LlmConfig, LlmProvider}; 2use crate::llm::LlmClient; 3use crate::llm::anthropic::AnthropicClient; 4use crate::llm::ollama::OllamaClient; 5use crate::llm::openai::OpenAiClient; 6use anyhow::Result; 7use std::sync::Arc; 8 9pub fn create_client(config: &Config, llm_config: &LlmConfig) -> Result<Arc<dyn LlmClient>> { 10 match llm_config.provider { 11 LlmProvider::Anthropic => { 12 let anthropic_config = config.anthropic.as_ref().ok_or_else(|| { 13 anyhow::anyhow!("Anthropic provider selected but [anthropic] config missing") 14 })?; 15 16 Ok(Arc::new(AnthropicClient::new( 17 anthropic_config.api_key.clone(), 18 llm_config.model.clone(), 19 llm_config.max_tokens, 20 ))) 21 } 22 LlmProvider::OpenAi => { 23 let openai_config = config.openai.as_ref().ok_or_else(|| { 24 anyhow::anyhow!("OpenAI provider selected but [openai] config missing") 25 })?; 26 27 Ok(Arc::new(OpenAiClient::new( 28 openai_config.api_key.clone(), 29 llm_config.model.clone(), 30 llm_config.max_tokens, 31 ))) 32 } 33 LlmProvider::Ollama => { 34 let ollama_config = config.ollama.as_ref().ok_or_else(|| { 35 anyhow::anyhow!("Ollama provider selected but [ollama] config missing") 36 })?; 37 38 Ok(Arc::new(OllamaClient::new( 39 ollama_config.base_url.clone(), 40 llm_config.model.clone(), 41 ))) 42 } 43 } 44}