WIP: Output tool via Arc<Mutex<Subconscious>>, ToolHandler to Arc<dyn Fn>
- ToolHandler changed to Arc<dyn Fn(...)> (supports closures) - Subconscious wrapped in Arc<Mutex<>> on Mind - init_output_tool() pushes output tool closure capturing the Arc - Output removed from static memory_tools() - Most tool handlers wrapped in Arc::new() but some have paren issues Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
parent
d167b11283
commit
12798eeae2
15 changed files with 74 additions and 51 deletions
|
|
@ -37,40 +37,37 @@ pub fn memory_tools() -> [super::Tool; 12] {
|
|||
[
|
||||
Tool { name: "memory_render", description: "Read a memory node's content and links.",
|
||||
parameters_json: r#"{"type":"object","properties":{"key":{"type":"string","description":"Node key"}},"required":["key"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { render(&v) }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { render(&v) })) },
|
||||
Tool { name: "memory_write", description: "Create or update a memory node.",
|
||||
parameters_json: r#"{"type":"object","properties":{"key":{"type":"string","description":"Node key"},"content":{"type":"string","description":"Full content (markdown)"}},"required":["key","content"]}"#,
|
||||
handler: |a, v| Box::pin(async move { write(&a, &v).await }) },
|
||||
handler: Arc::new(|a, v| Box::pin(async move { write(&a, &v).await })) },
|
||||
Tool { name: "memory_search", description: "Search the memory graph via spreading activation. Give 2-4 seed node keys.",
|
||||
parameters_json: r#"{"type":"object","properties":{"keys":{"type":"array","items":{"type":"string"},"description":"Seed node keys to activate from"}},"required":["keys"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { search(&v).await }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { search(&v).await })) },
|
||||
Tool { name: "memory_links", description: "Show a node's neighbors with link strengths.",
|
||||
parameters_json: r#"{"type":"object","properties":{"key":{"type":"string","description":"Node key"}},"required":["key"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { links(&v) }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { links(&v) })) },
|
||||
Tool { name: "memory_link_set", description: "Set link strength between two nodes.",
|
||||
parameters_json: r#"{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"strength":{"type":"number","description":"0.01 to 1.0"}},"required":["source","target","strength"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { link_set(&v).await }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { link_set(&v).await })) },
|
||||
Tool { name: "memory_link_add", description: "Add a new link between two nodes.",
|
||||
parameters_json: r#"{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]}"#,
|
||||
handler: |a, v| Box::pin(async move { link_add(&a, &v).await }) },
|
||||
handler: Arc::new(|a, v| Box::pin(async move { link_add(&a, &v).await })) },
|
||||
Tool { name: "memory_used", description: "Mark a node as useful (boosts weight).",
|
||||
parameters_json: r#"{"type":"object","properties":{"key":{"type":"string","description":"Node key"}},"required":["key"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { used(&v).await }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { used(&v).await })) },
|
||||
Tool { name: "memory_weight_set", description: "Set a node's weight directly (0.01 to 1.0).",
|
||||
parameters_json: r#"{"type":"object","properties":{"key":{"type":"string"},"weight":{"type":"number","description":"0.01 to 1.0"}},"required":["key","weight"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { weight_set(&v).await }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { weight_set(&v).await })) },
|
||||
Tool { name: "memory_rename", description: "Rename a node key in place.",
|
||||
parameters_json: r#"{"type":"object","properties":{"old_key":{"type":"string"},"new_key":{"type":"string"}},"required":["old_key","new_key"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { rename(&v).await }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { rename(&v).await })) },
|
||||
Tool { name: "memory_supersede", description: "Mark a node as superseded by another (sets weight to 0.01).",
|
||||
parameters_json: r#"{"type":"object","properties":{"old_key":{"type":"string"},"new_key":{"type":"string"},"reason":{"type":"string"}},"required":["old_key","new_key"]}"#,
|
||||
handler: |a, v| Box::pin(async move { supersede(&a, &v).await }) },
|
||||
handler: Arc::new(|a, v| Box::pin(async move { supersede(&a, &v).await })) },
|
||||
Tool { name: "memory_query", description: "Run a structured query against the memory graph.",
|
||||
parameters_json: r#"{"type":"object","properties":{"query":{"type":"string","description":"Query expression"}},"required":["query"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { query(&v).await }) },
|
||||
Tool { name: "output", description: "Produce a named output value for passing between steps.",
|
||||
parameters_json: r#"{"type":"object","properties":{"key":{"type":"string","description":"Output name"},"value":{"type":"string","description":"Output value"}},"required":["key","value"]}"#,
|
||||
handler: |_a, v| Box::pin(async move { output(&v) }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { query(&v).await })) },
|
||||
]
|
||||
}
|
||||
|
||||
|
|
@ -79,13 +76,13 @@ pub fn journal_tools() -> [super::Tool; 3] {
|
|||
[
|
||||
Tool { name: "journal_tail", description: "Read the last N journal entries (default 1).",
|
||||
parameters_json: r#"{"type":"object","properties":{"count":{"type":"integer","description":"Number of entries (default 1)"}}}"#,
|
||||
handler: |_a, v| Box::pin(async move { journal_tail(&v).await }) },
|
||||
handler: Arc::new(|_a, v| Box::pin(async move { journal_tail(&v).await })) },
|
||||
Tool { name: "journal_new", description: "Start a new journal entry.",
|
||||
parameters_json: r#"{"type":"object","properties":{"name":{"type":"string","description":"Short node name (becomes the key)"},"title":{"type":"string","description":"Descriptive title"},"body":{"type":"string","description":"Entry body"}},"required":["name","title","body"]}"#,
|
||||
handler: |a, v| Box::pin(async move { journal_new(&a, &v).await }) },
|
||||
handler: Arc::new(|a, v| Box::pin(async move { journal_new(&a, &v).await })) },
|
||||
Tool { name: "journal_update", description: "Append text to the most recent journal entry.",
|
||||
parameters_json: r#"{"type":"object","properties":{"body":{"type":"string","description":"Text to append"}},"required":["body"]}"#,
|
||||
handler: |a, v| Box::pin(async move { journal_update(&a, &v).await }) },
|
||||
handler: Arc::new(|a, v| Box::pin(async move { journal_update(&a, &v).await })) },
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue