use crate::session::delegation::DelegationState;
use crate::session::delegation_skills::AUTOCHAT_PERSONA;
use crate::session::relevance::{Bucket, Dependency, Difficulty, ToolUse};
use super::persona::{Persona, default_chain};
#[cfg(test)]
#[path = "persona_pick_tests.rs"]
mod tests;
pub fn relay_bucket() -> Bucket {
Bucket {
difficulty: Difficulty::Medium,
dependency: Dependency::Isolated,
tool_use: ToolUse::No,
}
}
pub fn rank_chain(state: &DelegationState, bucket: Bucket) -> Vec<Persona> {
let chain: Vec<Persona> = default_chain().to_vec();
if !state.enabled() {
return chain;
}
let mut scored: Vec<(Persona, f64)> = chain
.into_iter()
.map(|p| {
let score = state.score(p.name, AUTOCHAT_PERSONA, bucket).unwrap_or(0.0);
(p, score)
})
.collect();
scored.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal));
scored.into_iter().map(|(p, _)| p).collect()
}
pub fn record_outcome(state: &mut DelegationState, persona: &str, bucket: Bucket, success: bool) {
if !state.enabled() {
return;
}
state.update(persona, AUTOCHAT_PERSONA, bucket, success);
}