Files
baibot-withmcp/src/controller/utils/agent.rs
2025-02-27 09:58:58 +02:00

65 lines
2.1 KiB
Rust

use mxlink::MessageResponseType;
use crate::{
Bot,
agent::{
AgentInstance, AgentPurpose,
utils::{AgentForPurposeDeterminationError, get_effective_agent_for_purpose},
},
entity::MessageContext,
strings,
};
pub async fn get_effective_agent_for_purpose_or_complain(
bot: &Bot,
message_context: &MessageContext,
agent_purpose: AgentPurpose,
response_type: MessageResponseType,
complain_when_purpose_unsupported: bool,
) -> Option<AgentInstance> {
let agent_info = get_effective_agent_for_purpose(
bot.agent_manager(),
message_context.room_config_context(),
agent_purpose,
)
.await;
match agent_info {
Ok(agent_info) => Some(agent_info.instance),
Err(err) => {
let error_message = match err {
AgentForPurposeDeterminationError::Unknown(err_string) => Some(err_string),
AgentForPurposeDeterminationError::NoneConfigured => None,
AgentForPurposeDeterminationError::ConfiguredButMissing(agent_identifier) => Some(
strings::room_config::configures_agent_for_purpose_but_does_not_exist(
&agent_identifier,
agent_purpose,
),
),
AgentForPurposeDeterminationError::ConfiguredButLacksSupport(agent_identifier) => {
if complain_when_purpose_unsupported {
Some(strings::room_config::configures_agent_for_purpose_but_agent_does_not_support_it(
&agent_identifier,
agent_purpose,
))
} else {
None
}
}
};
if let Some(error_message) = error_message {
bot.messaging()
.send_error_markdown_no_fail(
message_context.room(),
&error_message,
response_type,
)
.await;
};
None
}
}
}