selene_graph/candidate_state_shared.rs
1//! Shared-graph helpers for maintained candidate-state providers.
2
3use selene_core::DbString;
4
5use crate::{
6 CANDIDATE_STATE_PROVIDER_TAG, ProviderError, ProviderTag, SharedGraph, VectorCandidateSet,
7 VectorCandidateStateInfo,
8};
9
10impl SharedGraph {
11 /// Look up a generation-checked maintained vector candidate set by name.
12 ///
13 /// `Ok(None)` means no maintained candidate-state provider is registered or
14 /// the provider has no set named `name`. The returned set is tied to the
15 /// same immutable snapshot generation used for the lookup.
16 ///
17 /// # Errors
18 ///
19 /// Returns [`ProviderError`] when the candidate-state provider is present
20 /// but cannot prove it has applied through the current graph generation.
21 pub fn vector_candidate_set(
22 &self,
23 name: &DbString,
24 ) -> Result<Option<VectorCandidateSet>, ProviderError> {
25 let snapshot = self.read();
26 let Some(provider) = self.index_provider_by_tag(ProviderTag(CANDIDATE_STATE_PROVIDER_TAG))
27 else {
28 return Ok(None);
29 };
30 provider.vector_candidate_set(name, snapshot.meta.generation)
31 }
32
33 /// Return generation-checked metadata for maintained vector candidate states.
34 ///
35 /// An empty vector means no maintained candidate-state provider is
36 /// registered for this graph. The metadata is tied to the same immutable
37 /// graph snapshot that supplies the generation value, so callers can use the
38 /// returned names immediately with vector candidate-state scoring.
39 ///
40 /// # Errors
41 ///
42 /// Returns [`ProviderError`] when the candidate-state provider is present
43 /// but cannot prove it has applied through the current graph generation.
44 pub fn vector_candidate_state_infos(
45 &self,
46 ) -> Result<Vec<VectorCandidateStateInfo>, ProviderError> {
47 let snapshot = self.read();
48 let Some(provider) = self.index_provider_by_tag(ProviderTag(CANDIDATE_STATE_PROVIDER_TAG))
49 else {
50 return Ok(Vec::new());
51 };
52 provider.vector_candidate_state_infos(snapshot.meta.generation)
53 }
54}