mirror of
https://github.com/RightNow-AI/openfang.git
synced 2026-07-30 06:32:17 +00:00
provider switching
This commit is contained in:
@@ -2202,16 +2202,34 @@ impl OpenFangKernel {
|
||||
|
||||
/// Switch an agent's model.
|
||||
pub fn set_agent_model(&self, agent_id: AgentId, model: &str) -> KernelResult<()> {
|
||||
self.registry
|
||||
.update_model(agent_id, model.to_string())
|
||||
.map_err(KernelError::OpenFang)?;
|
||||
// Resolve provider from model catalog so switching models also switches provider
|
||||
let resolved_provider = self
|
||||
.model_catalog
|
||||
.read()
|
||||
.ok()
|
||||
.and_then(|catalog| {
|
||||
catalog
|
||||
.find_model(model)
|
||||
.map(|entry| entry.provider.clone())
|
||||
});
|
||||
|
||||
if let Some(provider) = resolved_provider {
|
||||
self.registry
|
||||
.update_model_and_provider(agent_id, model.to_string(), provider.clone())
|
||||
.map_err(KernelError::OpenFang)?;
|
||||
info!(agent_id = %agent_id, model = %model, provider = %provider, "Agent model+provider updated");
|
||||
} else {
|
||||
self.registry
|
||||
.update_model(agent_id, model.to_string())
|
||||
.map_err(KernelError::OpenFang)?;
|
||||
info!(agent_id = %agent_id, model = %model, "Agent model updated");
|
||||
}
|
||||
|
||||
// Persist the updated entry
|
||||
if let Some(entry) = self.registry.get(agent_id) {
|
||||
let _ = self.memory.save_agent(&entry);
|
||||
}
|
||||
|
||||
info!(agent_id = %agent_id, model = %model, "Agent model updated");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -160,6 +160,23 @@ impl AgentRegistry {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Update an agent's model AND provider together.
|
||||
pub fn update_model_and_provider(
|
||||
&self,
|
||||
id: AgentId,
|
||||
new_model: String,
|
||||
new_provider: String,
|
||||
) -> OpenFangResult<()> {
|
||||
let mut entry = self
|
||||
.agents
|
||||
.get_mut(&id)
|
||||
.ok_or_else(|| OpenFangError::AgentNotFound(id.to_string()))?;
|
||||
entry.manifest.model.model = new_model;
|
||||
entry.manifest.model.provider = new_provider;
|
||||
entry.last_active = chrono::Utc::now();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Update an agent's skill allowlist.
|
||||
pub fn update_skills(&self, id: AgentId, skills: Vec<String>) -> OpenFangResult<()> {
|
||||
let mut entry = self
|
||||
|
||||
Reference in New Issue
Block a user