forked from kent/consciousness
migrate more files to use index-based node access
- learn.rs, daemon.rs, graph.rs, digest.rs, prompts.rs - Convert store.nodes.get() → store.get_node() - Convert store.nodes.contains_key() → store.contains_key() - Convert store.nodes.values/iter() → all_keys + get_node Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
parent
fe6450223c
commit
af3e41f1d9
5 changed files with 63 additions and 43 deletions
|
|
@ -30,15 +30,18 @@ pub fn format_topology_header(store: &Store, graph: &Graph) -> String {
|
|||
|
||||
// Type counts
|
||||
let mut type_counts: std::collections::HashMap<&str, usize> = std::collections::HashMap::new();
|
||||
for node in store.nodes.values() {
|
||||
let label = match node.node_type {
|
||||
crate::store::NodeType::Semantic => "semantic",
|
||||
crate::store::NodeType::EpisodicSession
|
||||
| crate::store::NodeType::EpisodicDaily
|
||||
| crate::store::NodeType::EpisodicWeekly
|
||||
| crate::store::NodeType::EpisodicMonthly => "episodic",
|
||||
};
|
||||
*type_counts.entry(label).or_default() += 1;
|
||||
let all_keys = store.all_keys().unwrap_or_default();
|
||||
for key in &all_keys {
|
||||
if let Ok(Some(node)) = store.get_node(key) {
|
||||
let label = match node.node_type {
|
||||
crate::store::NodeType::Semantic => "semantic",
|
||||
crate::store::NodeType::EpisodicSession
|
||||
| crate::store::NodeType::EpisodicDaily
|
||||
| crate::store::NodeType::EpisodicWeekly
|
||||
| crate::store::NodeType::EpisodicMonthly => "episodic",
|
||||
};
|
||||
*type_counts.entry(label).or_default() += 1;
|
||||
}
|
||||
}
|
||||
let mut types: Vec<_> = type_counts.iter().collect();
|
||||
types.sort_by_key(|(_, c)| std::cmp::Reverse(**c));
|
||||
|
|
@ -86,7 +89,7 @@ pub fn format_nodes_section(store: &Store, items: &[ReplayItem], graph: &Graph)
|
|||
let hub_thresh = graph.hub_threshold();
|
||||
let mut out = String::new();
|
||||
for item in items {
|
||||
let node = match store.nodes.get(&item.key) {
|
||||
let node = match store.get_node(&item.key).ok().flatten() {
|
||||
Some(n) => n,
|
||||
None => continue,
|
||||
};
|
||||
|
|
@ -139,7 +142,9 @@ pub fn format_nodes_section(store: &Store, items: &[ReplayItem], graph: &Graph)
|
|||
out.push_str("Neighbors:\n");
|
||||
for (n, strength) in neighbors.iter().take(15) {
|
||||
let n_cc = graph.clustering_coefficient(n);
|
||||
let n_community = store.nodes.get(n.as_str())
|
||||
let n_community = store.get_node(n)
|
||||
.ok()
|
||||
.flatten()
|
||||
.and_then(|n| n.community_id);
|
||||
out.push_str(&format!(" - {} (str={:.2}, cc={:.3}",
|
||||
n, strength, n_cc));
|
||||
|
|
@ -165,9 +170,12 @@ pub fn format_health_section(store: &Store, graph: &Graph) -> String {
|
|||
|
||||
// Weight histogram
|
||||
let mut buckets = [0u32; 10]; // 0.0-0.1, 0.1-0.2, ..., 0.9-1.0
|
||||
for node in store.nodes.values() {
|
||||
let bucket = ((node.weight * 10.0) as usize).min(9);
|
||||
buckets[bucket] += 1;
|
||||
let all_keys = store.all_keys().unwrap_or_default();
|
||||
for key in &all_keys {
|
||||
if let Ok(Some(node)) = store.get_node(key) {
|
||||
let bucket = ((node.weight * 10.0) as usize).min(9);
|
||||
buckets[bucket] += 1;
|
||||
}
|
||||
}
|
||||
for (i, &count) in buckets.iter().enumerate() {
|
||||
let lo = i as f32 / 10.0;
|
||||
|
|
@ -177,9 +185,9 @@ pub fn format_health_section(store: &Store, graph: &Graph) -> String {
|
|||
}
|
||||
|
||||
// Near-prune nodes
|
||||
let near_prune: Vec<_> = store.nodes.iter()
|
||||
.filter(|(_, n)| n.weight < 0.15)
|
||||
.map(|(k, n)| (k.clone(), n.weight))
|
||||
let near_prune: Vec<_> = all_keys.iter()
|
||||
.filter_map(|k| store.get_node(k).ok()?.map(|n| (k.clone(), n.weight)))
|
||||
.filter(|(_, w)| *w < 0.15)
|
||||
.collect();
|
||||
if !near_prune.is_empty() {
|
||||
out.push_str(&format!("\n## Near-prune nodes ({} total)\n", near_prune.len()));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue