Skip to main content

hirn_engine/tools/
types.rs

1//! Request/response types for the MemoryToolkit agent API.
2
3use std::collections::BTreeMap;
4
5use hirn_core::id::MemoryId;
6use hirn_core::metadata::Metadata;
7use hirn_core::types::{EdgeRelation, EventType, Namespace};
8
9/// Request to store a new memory.
10#[derive(Debug, Clone)]
11pub struct StoreRequest {
12    /// Memory content (required, non-empty).
13    pub content: String,
14    /// Optional event type (defaults to Observation).
15    pub event_type: Option<EventType>,
16    /// Optional importance override (0.0–1.0).
17    pub importance: Option<f32>,
18    /// Optional pre-computed embedding vector.
19    pub embedding: Option<Vec<f32>>,
20    /// Target namespace (defaults to "default").
21    pub namespace: Option<Namespace>,
22    /// Optional metadata key-value pairs.
23    pub metadata: Option<Metadata>,
24    /// Optional entity names to extract/associate.
25    pub entities: Option<Vec<String>>,
26}
27
28/// Options for recalling memories.
29#[derive(Debug, Clone, Default)]
30pub struct RecallOptions {
31    /// Maximum number of results (default: 10).
32    pub limit: Option<usize>,
33    /// Target namespace (defaults to "default").
34    pub namespace: Option<Namespace>,
35}
36
37/// A single recalled memory record.
38#[derive(Debug, Clone)]
39pub struct RecallRecord {
40    pub id: MemoryId,
41    pub content: String,
42    pub score: f64,
43    pub metadata: BTreeMap<String, String>,
44}
45
46/// Request to update an existing memory.
47#[derive(Debug, Clone)]
48pub struct UpdateRequest {
49    /// ID of the memory to update (required).
50    pub id: MemoryId,
51    /// New content (if provided, replaces existing).
52    pub content: Option<String>,
53    /// Metadata to merge (if provided).
54    pub metadata: Option<Metadata>,
55    /// New importance (if provided).
56    pub importance: Option<f32>,
57}
58
59/// Request to link two memories.
60#[derive(Debug, Clone)]
61pub struct LinkRequest {
62    pub source_id: MemoryId,
63    pub target_id: MemoryId,
64    pub relation: EdgeRelation,
65    pub weight: Option<f32>,
66    pub metadata: Option<Metadata>,
67}
68
69/// Result of an introspection query.
70#[derive(Debug, Clone)]
71pub struct IntrospectionResult {
72    /// Database-level statistics.
73    pub total_memories: u64,
74    pub episodic_count: u64,
75    pub semantic_count: u64,
76    pub procedural_count: u64,
77    pub working_count: u64,
78    pub edge_count: u64,
79    /// Graph neighborhood for a queried memory (if id provided).
80    pub edges: Vec<EdgeInfo>,
81}
82
83/// Summary of a graph edge visible in introspection.
84#[derive(Debug, Clone)]
85pub struct EdgeInfo {
86    pub source: MemoryId,
87    pub target: MemoryId,
88    pub relation: EdgeRelation,
89    pub weight: f32,
90}