graph: delete cmd_spread, convert cmd_link to RPC
cmd_spread was duplicate of cmd_search/memory_search. cmd_link now uses memory_links RPC. Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
parent
70097fa84b
commit
be9db3fb1a
2 changed files with 6 additions and 54 deletions
|
|
@ -101,56 +101,17 @@ pub fn cmd_normalize_strengths(apply: bool) -> Result<(), String> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cmd_spread(keys: &[String], max_results: usize) -> Result<(), String> {
|
|
||||||
if keys.is_empty() {
|
|
||||||
return Err("spread requires at least one seed key".into());
|
|
||||||
}
|
|
||||||
|
|
||||||
let store = store::Store::load()?;
|
|
||||||
let graph = graph::build_graph_fast(&store);
|
|
||||||
let params = store.params();
|
|
||||||
|
|
||||||
let seeds: Vec<(String, f64)> = keys.iter()
|
|
||||||
.filter_map(|k| {
|
|
||||||
let resolved = store.resolve_key(k).ok()?;
|
|
||||||
Some((resolved, 1.0))
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
if seeds.is_empty() {
|
|
||||||
return Err("no valid seed keys found".into());
|
|
||||||
}
|
|
||||||
|
|
||||||
let results = crate::search::spreading_activation(
|
|
||||||
&seeds, &graph, &store,
|
|
||||||
params.max_hops, params.edge_decay, params.min_activation,
|
|
||||||
);
|
|
||||||
|
|
||||||
let seed_keys: std::collections::HashSet<&str> = seeds.iter()
|
|
||||||
.map(|(k, _)| k.as_str())
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
for (key, score) in results.iter()
|
|
||||||
.filter(|(k, _)| !seed_keys.contains(k.as_str()))
|
|
||||||
.take(max_results)
|
|
||||||
{
|
|
||||||
println!(" {:.2} {}", score, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn cmd_link(key: &[String]) -> Result<(), String> {
|
pub fn cmd_link(key: &[String]) -> Result<(), String> {
|
||||||
if key.is_empty() {
|
if key.is_empty() {
|
||||||
return Err("link requires a key".into());
|
return Err("link requires a key".into());
|
||||||
}
|
}
|
||||||
let key = key.join(" ");
|
let key = key.join(" ");
|
||||||
let store = store::Store::load()?;
|
let result = crate::mcp_server::memory_rpc(
|
||||||
let resolved = store.resolve_key(&key)?;
|
"memory_links",
|
||||||
let g = store.build_graph();
|
serde_json::json!({"key": key}),
|
||||||
println!("Neighbors of '{}':", resolved);
|
).map_err(|e| e.to_string())?;
|
||||||
crate::query_parser::run_query(&store, &g,
|
print!("{}", result);
|
||||||
&format!("neighbors('{}') | select strength,clustering_coefficient", resolved))
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cmd_link_add(source: &str, target: &str, _reason: &[String]) -> Result<(), String> {
|
pub fn cmd_link_add(source: &str, target: &str, _reason: &[String]) -> Result<(), String> {
|
||||||
|
|
|
||||||
|
|
@ -214,14 +214,6 @@ enum GraphCmd {
|
||||||
/// Node key
|
/// Node key
|
||||||
key: Vec<String>,
|
key: Vec<String>,
|
||||||
},
|
},
|
||||||
/// Find related nodes via spreading activation from seed nodes
|
|
||||||
Spread {
|
|
||||||
/// Seed node keys
|
|
||||||
keys: Vec<String>,
|
|
||||||
/// Maximum results (default: 20)
|
|
||||||
#[arg(short = 'n', default_value_t = 20)]
|
|
||||||
max_results: usize,
|
|
||||||
},
|
|
||||||
/// Add a link between two nodes
|
/// Add a link between two nodes
|
||||||
#[command(name = "link-add")]
|
#[command(name = "link-add")]
|
||||||
LinkAdd {
|
LinkAdd {
|
||||||
|
|
@ -479,7 +471,6 @@ impl Run for GraphCmd {
|
||||||
fn run(self) -> Result<(), String> {
|
fn run(self) -> Result<(), String> {
|
||||||
match self {
|
match self {
|
||||||
Self::Link { key } => cli::graph::cmd_link(&key),
|
Self::Link { key } => cli::graph::cmd_link(&key),
|
||||||
Self::Spread { keys, max_results } => cli::graph::cmd_spread(&keys, max_results),
|
|
||||||
Self::LinkAdd { source, target, reason }
|
Self::LinkAdd { source, target, reason }
|
||||||
=> cli::graph::cmd_link_add(&source, &target, &reason),
|
=> cli::graph::cmd_link_add(&source, &target, &reason),
|
||||||
Self::LinkSet { source, target, strength }
|
Self::LinkSet { source, target, strength }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue