Skip to main content

GraphRAGService

Struct GraphRAGService 

Source
pub struct GraphRAGService<G: GraphBackend> {
    recall: Arc<RecallService>,
    graph: Arc<GraphService<G>>,
    extractor: EntityExtractorService,
    config: GraphRAGConfig,
}
Expand description

Service for hybrid search combining semantic search with graph expansion.

The Graph RAG service enhances traditional memory recall by:

  1. Extracting entities from the user’s query
  2. Expanding the knowledge graph to find related entities
  3. Retrieving memories linked to those entities
  4. Merging and re-ranking results from both sources

This provides contextually richer results that leverage the connections between concepts, people, and technologies in the knowledge graph.

Fields§

§recall: Arc<RecallService>

The recall service for semantic/text search.

§graph: Arc<GraphService<G>>

The graph service for knowledge graph operations.

§extractor: EntityExtractorService

The entity extractor for query analysis.

§config: GraphRAGConfig

Configuration for the service.

Implementations§

Source§

impl<G: GraphBackend> GraphRAGService<G>

Source

pub const fn new( recall: Arc<RecallService>, graph: Arc<GraphService<G>>, extractor: EntityExtractorService, config: GraphRAGConfig, ) -> Self

Creates a new Graph RAG service.

§Arguments
  • recall - The recall service for semantic search.
  • graph - The graph service for knowledge graph operations.
  • extractor - The entity extractor for query analysis.
  • config - Configuration for the service.
Source

pub fn search_with_expansion( &self, query: &str, filter: &SearchFilter, limit: usize, expansion: Option<ExpansionConfig>, ) -> Result<GraphSearchResults>

Performs a hybrid search with graph expansion.

This method:

  1. Runs traditional semantic/text search via RecallService
  2. Extracts entities from the query
  3. Traverses the knowledge graph to find related entities
  4. Retrieves memories linked to those entities
  5. Merges and re-ranks all results
§Arguments
  • query - The search query.
  • filter - Search filter to apply.
  • limit - Maximum number of results to return.
  • expansion - Optional expansion configuration.
§Returns

A GraphSearchResults containing all matched memories with provenance.

§Errors

Returns an error if search or graph operations fail.

Source

fn expand_from_entities( &self, entity_names: &[String], expansion: &ExpansionConfig, ) -> Result<HashMap<MemoryId, (f32, EntityId, usize)>>

Expands the graph from extracted entity names.

Source

fn expand_single_entity( &self, entity: &Entity, depth: usize, expansion: &ExpansionConfig, results: &mut HashMap<MemoryId, (f32, EntityId, usize)>, ) -> Result<()>

Expands a single entity and collects memory links.

Source

fn score_and_insert_memories( &self, memory_ids: &[MemoryId], source_entity: &EntityId, hop_count: usize, use_weight: bool, results: &mut HashMap<MemoryId, (f32, EntityId, usize)>, )

Calculates scores and inserts memory links into results.

Source

fn update_or_insert_memory( results: &mut HashMap<MemoryId, (f32, EntityId, usize)>, memory_id: &MemoryId, score: f32, source_entity: &EntityId, hop_count: usize, )

Updates an existing memory entry or inserts a new one.

Source

fn find_entities_by_name(&self, name: &str) -> Result<Vec<Entity>>

Finds entities by name (case-insensitive search).

Source

fn traverse_entity( &self, entity_id: &EntityId, max_depth: usize, ) -> Result<Vec<(EntityId, usize)>>

Traverses the graph from an entity up to the specified depth.

Source

fn add_neighbors_to_frontier( &self, entity_id: &EntityId, current_depth: usize, frontier: &mut Vec<(EntityId, usize)>, ) -> Result<()>

Adds neighbors of an entity to the traversal frontier.

Gets memory IDs linked to an entity via mentions.

Source

fn merge_results( &self, semantic: SearchResult, graph: HashMap<MemoryId, (f32, EntityId, usize)>, _expansion: &ExpansionConfig, ) -> Result<Vec<GraphSearchHit>>

Merges semantic results with graph expansion results.

Source

fn merge_single_graph_result( &self, hits: &mut HashMap<String, GraphSearchHit>, id: String, memory_id: &MemoryId, graph_score: f32, source_entity: EntityId, hop_count: usize, )

Merges a single graph result into the hits map.

Source

pub fn search_semantic_only( &self, query: &str, filter: &SearchFilter, limit: usize, ) -> Result<GraphSearchResults>

Performs semantic-only search (no graph expansion).

This is useful for comparison or when graph expansion is not desired.

§Errors

Returns an error if the semantic search operation fails.

Source

pub fn search_graph_only( &self, query: &str, limit: usize, expansion: Option<ExpansionConfig>, ) -> Result<GraphSearchResults>

Performs graph-only search (no semantic search).

Searches by extracting entities from the query and expanding the graph.

§Errors

Returns an error if entity extraction or graph expansion fails.

Auto Trait Implementations§

§

impl<G> Freeze for GraphRAGService<G>

§

impl<G> !RefUnwindSafe for GraphRAGService<G>

§

impl<G> Send for GraphRAGService<G>

§

impl<G> Sync for GraphRAGService<G>

§

impl<G> Unpin for GraphRAGService<G>

§

impl<G> !UnwindSafe for GraphRAGService<G>

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<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.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

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

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

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
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

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

impl<L> LayerExt<L> for L

§

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].
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. 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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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