Skip to main content

TopicIndexService

Struct TopicIndexService 

Source
pub struct TopicIndexService {
    topics: Arc<RwLock<HashMap<String, Vec<MemoryId>>>>,
    topic_namespaces: Arc<RwLock<HashMap<String, Vec<Namespace>>>>,
    last_refresh: Arc<RwLock<Option<Instant>>>,
    refresh_interval: Duration,
}
Expand description

Service for maintaining topic → memory mappings.

Fields§

§topics: Arc<RwLock<HashMap<String, Vec<MemoryId>>>>

Topic to memory ID mappings.

§topic_namespaces: Arc<RwLock<HashMap<String, Vec<Namespace>>>>

Topic to namespace mappings.

§last_refresh: Arc<RwLock<Option<Instant>>>

Last refresh timestamp.

§refresh_interval: Duration

Refresh interval.

Implementations§

Source§

impl TopicIndexService

Source

pub fn new() -> Self

Creates a new topic index service.

Source

pub const fn with_refresh_interval(self, interval: Duration) -> Self

Sets the refresh interval.

Source

pub fn needs_refresh(&self) -> bool

Checks if the index needs refreshing.

Source

pub fn build_index(&self, recall: &RecallService) -> Result<()>

Builds the topic index from a recall service.

Extracts topics from:

  • Memory tags
  • Memory namespace names
  • Keywords in memory content
§Errors

Returns an error if memory retrieval fails.

Source

pub fn list_topics(&self) -> Result<Vec<TopicInfo>>

Lists all topics with their metadata.

§Errors

Returns an error if the lock is poisoned.

Source

pub fn get_topic_memories(&self, topic: &str) -> Result<Vec<MemoryId>>

Gets memory IDs for a specific topic.

§Errors

Returns an error if the lock is poisoned.

Source

pub fn get_topic_info(&self, topic: &str) -> Result<Option<TopicInfo>>

Gets topic info for a specific topic.

§Errors

Returns an error if the lock is poisoned.

Source

pub fn add_memory( &self, memory_id: &MemoryId, tags: &[String], namespace: Namespace, ) -> Result<()>

Adds a memory to the topic index.

Call this when a new memory is captured to keep the index up to date.

§Errors

Returns an error if the lock is poisoned.

Source

pub fn topic_count(&self) -> usize

Returns the number of topics in the index.

Source

pub fn association_count(&self) -> usize

Returns the total number of topic-memory associations.

Source

pub fn remove_memory(&self, memory_id: &MemoryId) -> Result<()>

Removes a memory from the topic index (PERF-M1: incremental updates).

Call this when a memory is deleted to keep the index up to date without requiring a full rebuild.

§Errors

Returns an error if the lock is poisoned.

Source

pub fn update_memory( &self, memory_id: &MemoryId, new_tags: &[String], new_namespace: Namespace, ) -> Result<()>

Updates a memory in the topic index (PERF-M1: incremental updates).

This is a convenience method that removes the old entry and adds the new one. Use this when tags or namespace change.

§Errors

Returns an error if the lock is poisoned.

Source

pub fn add_content_keywords( &self, memory_id: &MemoryId, content: &str, namespace: Namespace, ) -> Result<()>

Adds content-based keywords to the topic index (PERF-M1: incremental updates).

Call this after add_memory() to also index keywords from the memory content. This is separated to allow callers to control whether content keywords are indexed.

§Errors

Returns an error if the lock is poisoned.

Source

pub fn clear(&self) -> Result<()>

Clears the entire topic index.

Use before a full rebuild or when resetting state.

§Errors

Returns an error if the lock is poisoned.

Trait Implementations§

Source§

impl Default for TopicIndexService

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

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

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,