v1.3.0: COMPLETE - Full Rig Integration with Production Setup

This commit is contained in:
admin
2026-02-26 12:04:51 +04:00
Unverified
parent 5455eaa125
commit f15ff46120
11 changed files with 544 additions and 27 deletions

View File

@@ -1,9 +1,8 @@
//! Agent management and multi-agent orchestration
use anyhow::Result;
use anyhow::{Result, Context};
use rig::{
agent::Agent,
client::{CompletionClient, ProviderClient},
completion::{Completion, Message},
providers::openai,
};
@@ -79,7 +78,7 @@ impl AgentManager {
sessions.iter().find(|s| s.id == id).cloned()
}
/// Execute agent prompt
/// Execute agent prompt using Rig
pub async fn execute_prompt(
&self,
session_id: &str,
@@ -89,18 +88,21 @@ impl AgentManager {
.await
.ok_or_else(|| anyhow::anyhow!("Session not found"))?;
// Create Rig client based on provider
let client = self.create_client(&session.config.provider)?;
// Get API key based on provider
let api_key = self.get_api_key(&session.config.provider)?;
// Create Rig agent with OpenAI provider
// Note: Rig uses unified provider interface
let client = openai::Client::new(&api_key);
// Build agent with Rig
let agent = client
.agent(&session.config.model)
.preamble(&session.config.preamble)
.temperature(session.config.temperature)
.build();
// Execute prompt
let response = agent.prompt(prompt).await?;
let response = agent.prompt(prompt).await
.map_err(|e| anyhow::anyhow!("Rig prompt execution failed: {}", e))?;
// Store message
let mut sessions = self.sessions.write().await;
@@ -167,31 +169,38 @@ impl AgentManager {
for agent in &council.agents {
match self.execute_prompt(&agent.id, task).await {
Ok(result) => {
results.push(format!("{}: {}", agent.config.name, result));
results.push(format!("**{}**: {}", agent.config.name, result));
}
Err(e) => {
results.push(format!("{}: Error - {}", agent.config.name, e));
results.push(format!("**{}**: Error - {}", agent.config.name, e));
}
}
}
// Synthesize results
Ok(results.join("\n\n"))
Ok(results.join("\n\n---\n\n"))
}
/// Create Rig client for provider
fn create_client(&self, provider: &str) -> Result<openai::Client> {
/// Get API key for provider
fn get_api_key(&self, provider: &str) -> Result<String> {
match provider.to_lowercase().as_str() {
"openai" => {
let api_key = std::env::var("OPENAI_API_KEY")
.map_err(|_| anyhow::anyhow!("OPENAI_API_KEY not set"))?;
Ok(openai::Client::new(&api_key))
std::env::var("OPENAI_API_KEY")
.map_err(|_| anyhow::anyhow!("OPENAI_API_KEY not set"))
}
"anthropic" => {
std::env::var("ANTHROPIC_API_KEY")
.map_err(|_| anyhow::anyhow!("ANTHROPIC_API_KEY not set"))
}
"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)"))
}
_ => {
// Default to OpenAI for now
let api_key = std::env::var("OPENAI_API_KEY")
.unwrap_or_else(|_| "dummy".to_string());
Ok(openai::Client::new(&api_key))
std::env::var("OPENAI_API_KEY")
.map_err(|_| anyhow::anyhow!("Unknown provider '{}' and no OPENAI_API_KEY set", provider))
}
}
}