v1.3.1: Set Qwen as default provider for QwenClaw
This commit is contained in:
@@ -88,12 +88,19 @@ impl AgentManager {
|
||||
.await
|
||||
.ok_or_else(|| anyhow::anyhow!("Session not found"))?;
|
||||
|
||||
// Get API key based on provider
|
||||
let api_key = self.get_api_key(&session.config.provider)?;
|
||||
// Get provider config (API key + optional base URL)
|
||||
let (api_key, base_url) = self.get_provider_config(&session.config.provider)?;
|
||||
|
||||
// Create Rig agent with OpenAI provider
|
||||
// Note: Rig uses unified provider interface
|
||||
let client = openai::Client::new(&api_key);
|
||||
// Create Rig agent with OpenAI-compatible provider
|
||||
// Qwen uses OpenAI-compatible API, so we can use the OpenAI client
|
||||
let mut client_builder = openai::ClientBuilder::new(&api_key);
|
||||
|
||||
// Use custom base URL if provided (for Qwen or other compatible APIs)
|
||||
if let Some(url) = base_url {
|
||||
client_builder = client_builder.base_url(&url);
|
||||
}
|
||||
|
||||
let client = client_builder.build();
|
||||
|
||||
let agent = client
|
||||
.agent(&session.config.model)
|
||||
@@ -181,26 +188,36 @@ impl AgentManager {
|
||||
Ok(results.join("\n\n---\n\n"))
|
||||
}
|
||||
|
||||
/// Get API key for provider
|
||||
fn get_api_key(&self, provider: &str) -> Result<String> {
|
||||
/// Get API key and base URL for provider
|
||||
fn get_provider_config(&self, provider: &str) -> Result<(String, Option<String>)> {
|
||||
match provider.to_lowercase().as_str() {
|
||||
"openai" => {
|
||||
std::env::var("OPENAI_API_KEY")
|
||||
.map_err(|_| anyhow::anyhow!("OPENAI_API_KEY not set"))
|
||||
"qwen" | "qwen-plus" | "qwen-max" => {
|
||||
let api_key = std::env::var("QWEN_API_KEY")
|
||||
.map_err(|_| anyhow::anyhow!("QWEN_API_KEY not set. Get it from https://platform.qwen.ai"))?;
|
||||
let base_url = std::env::var("QWEN_BASE_URL").ok();
|
||||
Ok((api_key, base_url))
|
||||
}
|
||||
"anthropic" => {
|
||||
std::env::var("ANTHROPIC_API_KEY")
|
||||
.map_err(|_| anyhow::anyhow!("ANTHROPIC_API_KEY not set"))
|
||||
"openai" | "gpt-4" | "gpt-4o" | "gpt-3.5" => {
|
||||
let api_key = std::env::var("OPENAI_API_KEY")
|
||||
.map_err(|_| anyhow::anyhow!("OPENAI_API_KEY not set"))?;
|
||||
Ok((api_key, None))
|
||||
}
|
||||
"qwen" | "default" => {
|
||||
// Fall back to OpenAI for now
|
||||
std::env::var("OPENAI_API_KEY")
|
||||
.or_else(|_| std::env::var("QWEN_API_KEY"))
|
||||
.map_err(|_| anyhow::anyhow!("No API key found (tried OPENAI_API_KEY, QWEN_API_KEY)"))
|
||||
"anthropic" | "claude" | "claude-3" => {
|
||||
let api_key = std::env::var("ANTHROPIC_API_KEY")
|
||||
.map_err(|_| anyhow::anyhow!("ANTHROPIC_API_KEY not set"))?;
|
||||
Ok((api_key, None))
|
||||
}
|
||||
"ollama" | "local" => {
|
||||
// Ollama doesn't need API key, uses localhost
|
||||
Ok(("".to_string(), Some("http://localhost:11434".to_string())))
|
||||
}
|
||||
_ => {
|
||||
std::env::var("OPENAI_API_KEY")
|
||||
.map_err(|_| anyhow::anyhow!("Unknown provider '{}' and no OPENAI_API_KEY set", provider))
|
||||
// Default to Qwen for QwenClaw
|
||||
let api_key = std::env::var("QWEN_API_KEY")
|
||||
.or_else(|_| std::env::var("OPENAI_API_KEY"))
|
||||
.map_err(|_| anyhow::anyhow!("No API key found. Set QWEN_API_KEY or OPENAI_API_KEY"))?;
|
||||
let base_url = std::env::var("QWEN_BASE_URL").ok();
|
||||
Ok((api_key, base_url))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,14 +11,14 @@ pub struct Config {
|
||||
pub port: u16,
|
||||
/// Database path for vector store
|
||||
pub database_path: String,
|
||||
/// Default model provider
|
||||
/// Default model provider (Qwen for QwenClaw)
|
||||
pub default_provider: String,
|
||||
/// Default model name
|
||||
pub default_model: String,
|
||||
/// API keys for providers
|
||||
pub qwen_api_key: Option<String>,
|
||||
pub openai_api_key: Option<String>,
|
||||
pub anthropic_api_key: Option<String>,
|
||||
pub qwen_api_key: Option<String>,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
@@ -31,13 +31,14 @@ impl Config {
|
||||
.context("Invalid RIG_PORT")?,
|
||||
database_path: std::env::var("RIG_DATABASE_PATH")
|
||||
.unwrap_or_else(|_| "rig-store.db".to_string()),
|
||||
// QwenClaw default: Qwen provider
|
||||
default_provider: std::env::var("RIG_DEFAULT_PROVIDER")
|
||||
.unwrap_or_else(|_| "openai".to_string()),
|
||||
.unwrap_or_else(|_| "qwen".to_string()),
|
||||
default_model: std::env::var("RIG_DEFAULT_MODEL")
|
||||
.unwrap_or_else(|_| "gpt-4".to_string()),
|
||||
.unwrap_or_else(|_| "qwen-plus".to_string()),
|
||||
qwen_api_key: std::env::var("QWEN_API_KEY").ok(),
|
||||
openai_api_key: std::env::var("OPENAI_API_KEY").ok(),
|
||||
anthropic_api_key: std::env::var("ANTHROPIC_API_KEY").ok(),
|
||||
qwen_api_key: std::env::var("QWEN_API_KEY").ok(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user