Skip to main content

GraphMemory

Struct GraphMemory 

Source
pub struct GraphMemory { /* private fields */ }
Expand description

The main entry point for graph memory operations.

Implementations§

Source§

impl GraphMemory

Source

pub async fn open(path: &Path) -> Result<Self, GraphError>

Open a graph store at the given path.

The backend is chosen at runtime from the [graph] mode key of .recall-echo.toml in the parent directory (memory_dir): embedded (default) opens SurrealKV at path/surreal/; server connects to a SurrealDB server via the configured URL. The path is used for the FastEmbed models cache in both modes.

Source

pub async fn open_embedded(path: &Path) -> Result<Self, GraphError>

Open the embedded SurrealKV store at path/surreal/.

Source

pub async fn open_server(path: &Path) -> Result<Self, GraphError>

Connect to a SurrealDB server using [graph] settings from .recall-echo.toml in the parent directory (memory_dir). The path is still used for the FastEmbed models cache.

Source

pub async fn connect( config: &ServerConfig, models_dir: &Path, ) -> Result<Self, GraphError>

Connect to a SurrealDB server over WebSocket with explicit config.

Source

pub fn path(&self) -> &Path

Path to the graph store.

Source

pub fn provenance_weights(&self) -> &ProvenanceWeights

Evidence weights this store applies to observations, by provenance class ([graph.provenance]).

Source

pub async fn add_entity(&self, entity: NewEntity) -> Result<Entity, GraphError>

Add a new entity to the graph.

Source

pub async fn get_entity(&self, name: &str) -> Result<Option<Entity>, GraphError>

Get an entity by name.

Source

pub async fn get_entity_by_id( &self, id: &str, ) -> Result<Option<Entity>, GraphError>

Get an entity by its record ID.

Source

pub async fn update_entity( &self, id: &str, updates: EntityUpdate, ) -> Result<Entity, GraphError>

Update an entity’s fields.

Source

pub async fn delete_entity(&self, id: &str) -> Result<(), GraphError>

Delete an entity and its relationships.

Source

pub async fn list_entities( &self, entity_type: Option<&str>, ) -> Result<Vec<Entity>, GraphError>

List all entities, optionally filtered by type.

Source

pub async fn add_relationship( &self, rel: NewRelationship, ) -> Result<Relationship, GraphError>

Create a relationship between two named entities.

Source

pub async fn get_relationships( &self, entity_name: &str, direction: Direction, ) -> Result<Vec<Relationship>, GraphError>

Get relationships for an entity.

Source

pub async fn supersede_relationship( &self, old_id: &str, new: NewRelationship, ) -> Result<Relationship, GraphError>

Supersede a relationship: close the old one, create a new one.

Source

pub async fn update_relationship_confidence( &self, rel_id: &str, confidence: f64, ) -> Result<(), GraphError>

Overwrite a relationship’s confidence, resetting its evidence to the prior around the new mean.

Source

pub async fn reinforce_relationship( &self, rel_id: &str, evidence: EdgeEvidence, ) -> Result<(), GraphError>

Persist updated evidence for a relationship and reset its decay clock.

Called when a relationship is corroborated: the new posterior mean is stored as confidence, the coherence tally is stored beside it, and last_reinforced is set to now, preventing temporal decay from eroding the edge.

Source

pub async fn add_episode( &self, episode: NewEpisode, ) -> Result<Episode, GraphError>

Add a new episode authored by the agent itself.

The conservative default: a caller that cannot say where the text came from must not have it counted as independent evidence. Ingestion, which does know, uses GraphMemory::add_episode_from.

Source

pub async fn add_episode_from( &self, episode: NewEpisode, provenance: Provenance, ) -> Result<Episode, GraphError>

Add a new episode stamped with the class of whoever authored it.

Source

pub async fn get_episodes_by_session( &self, session_id: &str, ) -> Result<Vec<Episode>, GraphError>

Get episodes by session ID.

Source

pub async fn get_episode_by_log_number( &self, log_number: u32, ) -> Result<Option<Episode>, GraphError>

Get episode by log number.

Source

pub async fn ingest_archive( &self, archive_text: &str, context: &IngestContext, llm: Option<&dyn LlmProvider>, ) -> Result<IngestionReport, GraphError>

Ingest a conversation archive into the knowledge graph.

The IngestContext carries the provenance policy: conversation archives infer per chunk from turn roles, document ingestion forces a class.

Source

pub async fn extract_from_archive( &self, archive_text: &str, context: &IngestContext, llm: &dyn LlmProvider, ) -> Result<IngestionReport, GraphError>

Run LLM extraction on an archive without creating episodes.

Source

pub async fn mark_extracted(&self, log_number: u32) -> Result<(), GraphError>

Mark all episodes with a given log_number as extracted.

Source

pub async fn unextracted_log_numbers(&self) -> Result<Vec<i64>, GraphError>

Get log numbers of episodes that have NOT been extracted.

Source

pub async fn search( &self, query: &str, limit: usize, ) -> Result<Vec<SearchResult>, GraphError>

Semantic search across entities (legacy — returns full Entity).

Source

pub async fn search_with_options( &self, query: &str, options: &SearchOptions, ) -> Result<Vec<ScoredEntity>, GraphError>

Search with options — L1 projections, type/keyword filters.

Source

pub async fn search_episodes( &self, query: &str, limit: usize, ) -> Result<Vec<EpisodeSearchResult>, GraphError>

Semantic search across episodes.

Source

pub async fn query( &self, query_text: &str, options: &QueryOptions, ) -> Result<QueryResult, GraphError>

Hybrid query: semantic + graph expansion + optional episode search.

Source

pub async fn traverse( &self, entity_name: &str, depth: u32, ) -> Result<TraversalNode, GraphError>

Traverse the graph from a named entity.

Source

pub async fn traverse_filtered( &self, entity_name: &str, depth: u32, type_filter: Option<&str>, ) -> Result<TraversalNode, GraphError>

Traverse with type filter.

Source

pub async fn sync_pipeline( &self, docs: &PipelineDocuments, ) -> Result<PipelineSyncReport, GraphError>

Sync pipeline documents into the graph.

Source

pub async fn pipeline_stats( &self, staleness_days: u32, ) -> Result<PipelineGraphStats, GraphError>

Get pipeline stats from the graph.

Source

pub async fn pipeline_entities( &self, stage: &str, status: Option<&str>, ) -> Result<Vec<EntityDetail>, GraphError>

Get pipeline entities by stage and optional status.

Source

pub async fn pipeline_flow( &self, entity_name: &str, ) -> Result<Vec<(EntityDetail, String, EntityDetail)>, GraphError>

Trace pipeline flow for an entity.

Source

pub async fn sync_vigil_signals( &self, signals_path: &Path, ) -> Result<VigilSyncReport, GraphError>

Sync vigil signal vectors into the graph as Measurement entities.

Source

pub async fn sync_outcomes( &self, outcomes_path: &Path, ) -> Result<VigilSyncReport, GraphError>

Sync outcome records into the graph as Outcome entities.

Source

pub async fn sync_vigil( &self, signals_path: &Path, outcomes_path: &Path, ) -> Result<VigilSyncReport, GraphError>

Sync both vigil signals and outcomes in one call.

Source

pub async fn record_outcome_feedback( &self, session_id: &str, outcome: OutcomeKind, retrieved_entity_ids: &[String], used_entity_ids: Option<&[String]>, ) -> Result<FeedbackReport, GraphError>

Record outcome feedback: link retrieved entities to a session outcome and update their utility_score via EMA. used_entity_ids distinguishes the entities the response actually leaned on (full alpha) from retrieved-but- unused (muted alpha). Pass None to treat all retrieved as used.

Source

pub async fn record_session_outcome( &self, session_id: &str, outcome: OutcomeKind, ) -> Result<FeedbackReport, GraphError>

Apply an outcome to every entity a session touched.

Resolves the session’s entities from the contributed_to records ingestion left behind (falling back to the entities the session authored), then records the outcome and moves their utility scores. The report says which entities moved and where they landed.

Source

pub async fn record_session_use( &self, session_id: &str, entity_ids: &[String], ) -> Result<u32, GraphError>

Record that a session touched these entities, without judging it.

Source

pub async fn run_gc(&self, config: &GcConfig) -> Result<GcReport, GraphError>

Run garbage collection with the given config.

Source

pub async fn gc_stats(&self) -> Result<GcStatsReport, GraphError>

Get GC health stats without running collection.

Source

pub async fn delete_relationship(&self, id: &str) -> Result<(), GraphError>

Delete a single relationship by ID.

Source

pub async fn stats(&self) -> Result<GraphStats, GraphError>

Get graph statistics.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<U> As for U

Source§

fn as_<T>(self) -> T
where T: CastFrom<U>, U: Sized,

Casts self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more
Source§

impl<T> AsyncFriendly for T
where T: Send + Sync + 'static,

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

Source§

fn is_within(&self, b: &G2) -> bool