fix(hive-mind): ganti gerbang pipeline berbasis jumlah pesan dengan deteksi konvergensi sebelumnya
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
a125f5d440
commit
5498088532
@@ -69,6 +69,27 @@ pub struct NodeReport {
|
||||
pub output: String,
|
||||
}
|
||||
|
||||
/// Tag prefixing the system message `run_hive_mind`'s caller pushes into
|
||||
/// the conversation after a successful convergence. Shared between the
|
||||
/// push site (`actions/mod.rs`) and `hive_mind_already_ran` below so the
|
||||
/// two can never drift out of sync.
|
||||
pub const HIVE_MIND_CONSENSUS_TAG: &str = "[Hive-Mind Consensus]";
|
||||
|
||||
/// Detect whether a hive-mind convergence has already run earlier in this
|
||||
/// conversation, by checking prior system-message bodies for the
|
||||
/// consensus tag.
|
||||
///
|
||||
/// Why: gates re-triggering the Core Intelligence pipeline more than once
|
||||
/// per session on message *content* actually observed, rather than an
|
||||
/// arbitrary "first two user messages" cutoff that silently disabled the
|
||||
/// pipeline for any complex request phrased later in a long conversation.
|
||||
///
|
||||
/// Return: `true` if any prior system message starts with
|
||||
/// `HIVE_MIND_CONSENSUS_TAG`.
|
||||
pub fn hive_mind_already_ran<'a>(system_message_bodies: impl Iterator<Item = &'a str>) -> bool {
|
||||
system_message_bodies.into_iter().any(|body| body.starts_with(HIVE_MIND_CONSENSUS_TAG))
|
||||
}
|
||||
|
||||
/// Build the live-state callback that forwards node status updates to the
|
||||
/// TUI's workflow panel.
|
||||
fn build_live(
|
||||
@@ -408,4 +429,19 @@ mod tests {
|
||||
let node_id = format!("Node-{}-{}", 2, 1);
|
||||
assert_eq!(node_id, "Node-2-1");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hive_mind_already_ran_detects_prior_consensus_tag() {
|
||||
let bodies = vec![
|
||||
"you are a helpful assistant".to_string(),
|
||||
format!("{HIVE_MIND_CONSENSUS_TAG}\nthe bug is a null check"),
|
||||
];
|
||||
assert!(hive_mind_already_ran(bodies.iter().map(std::string::String::as_str)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hive_mind_already_ran_false_when_no_prior_convergence() {
|
||||
let bodies = vec!["you are a helpful assistant".to_string()];
|
||||
assert!(!hive_mind_already_ran(bodies.iter().map(std::string::String::as_str)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user