pub struct EntityExtractorService {
llm: Option<Arc<dyn LlmProvider>>,
domain: Domain,
min_confidence: f32,
}Expand description
Service for extracting entities from text content.
Uses an LLM to identify named entities and their relationships, with graceful fallback when LLM is unavailable.
Fields§
§llm: Option<Arc<dyn LlmProvider>>LLM provider for extraction.
domain: DomainDefault domain for extracted entities.
min_confidence: f32Minimum confidence threshold for entities.
Implementations§
Source§impl EntityExtractorService
impl EntityExtractorService
Sourcepub fn new(llm: Box<dyn LlmProvider>, domain: Domain) -> Self
pub fn new(llm: Box<dyn LlmProvider>, domain: Domain) -> Self
Creates a new entity extractor with an LLM provider.
Sourcepub const fn without_llm(domain: Domain) -> Self
pub const fn without_llm(domain: Domain) -> Self
Creates an entity extractor without LLM (fallback mode only).
Creates an entity extractor with a shared LLM provider.
Sourcepub const fn with_min_confidence(self, threshold: f32) -> Self
pub const fn with_min_confidence(self, threshold: f32) -> Self
Sets the minimum confidence threshold for extracted entities.
Sourcepub fn extract(&self, text: &str) -> Result<ExtractionResult>
pub fn extract(&self, text: &str) -> Result<ExtractionResult>
Extracts entities and relationships from text.
§Arguments
text- The text to extract entities from.
§Returns
An ExtractionResult containing extracted entities and relationships.
§Errors
Returns an error if LLM extraction fails and no fallback is possible.
Sourcefn extract_with_llm(
&self,
llm: &Arc<dyn LlmProvider>,
text: &str,
) -> Result<ExtractionResult>
fn extract_with_llm( &self, llm: &Arc<dyn LlmProvider>, text: &str, ) -> Result<ExtractionResult>
Extracts entities using LLM.
Sourcefn parse_llm_response(&self, response: &str) -> Result<LlmExtractionResponse>
fn parse_llm_response(&self, response: &str) -> Result<LlmExtractionResponse>
Parses the LLM JSON response.
Sourcefn extract_json(&self, response: &str) -> String
fn extract_json(&self, response: &str) -> String
Extracts JSON from a response that may be wrapped in markdown.
Sourcefn extract_json_from_markdown(&self, text: &str) -> Option<String>
fn extract_json_from_markdown(&self, text: &str) -> Option<String>
Extracts JSON from a markdown code block.
Sourcefn extract_raw_json(&self, text: &str) -> Option<String>
fn extract_raw_json(&self, text: &str) -> Option<String>
Extracts a raw JSON object from text.
Sourcefn extract_fallback(&self, text: &str) -> ExtractionResult
fn extract_fallback(&self, text: &str) -> ExtractionResult
Fallback extraction when LLM is unavailable.
Uses simple pattern matching for common entity patterns.
Sourcepub fn to_graph_entities(&self, extracted: &ExtractionResult) -> Vec<Entity>
pub fn to_graph_entities(&self, extracted: &ExtractionResult) -> Vec<Entity>
Sourcepub fn to_graph_relationships(
&self,
extracted: &ExtractionResult,
entity_map: &HashMap<String, Entity>,
) -> Vec<Relationship>
pub fn to_graph_relationships( &self, extracted: &ExtractionResult, entity_map: &HashMap<String, Entity>, ) -> Vec<Relationship>
Converts extracted relationships to graph Relationship objects.
Requires a mapping from entity names to entity IDs.
§Arguments
extracted- The extraction result.entity_map- Map from entity name to Entity.
§Returns
A vector of Relationship objects ready for storage.
Sourcepub fn infer_relationships(
&self,
entities: &[Entity],
) -> Result<InferenceResult>
pub fn infer_relationships( &self, entities: &[Entity], ) -> Result<InferenceResult>
Infers relationships between existing entities.
Analyzes a set of entities and uses LLM to discover implicit relationships that weren’t explicitly stated in text.
§Arguments
entities- The entities to analyze for relationships.
§Returns
An InferenceResult containing inferred relationships.
§Errors
Returns an error if LLM inference fails and no fallback is possible.
Sourcefn infer_with_llm(
&self,
llm: &Arc<dyn LlmProvider>,
entities: &[Entity],
) -> Result<InferenceResult>
fn infer_with_llm( &self, llm: &Arc<dyn LlmProvider>, entities: &[Entity], ) -> Result<InferenceResult>
Infers relationships using LLM.
Sourcefn format_entities_for_inference(&self, entities: &[Entity]) -> String
fn format_entities_for_inference(&self, entities: &[Entity]) -> String
Formats entities for LLM inference.
Sourcefn parse_inference_response(
&self,
response: &str,
) -> Result<LlmInferenceResponse>
fn parse_inference_response( &self, response: &str, ) -> Result<LlmInferenceResponse>
Parses the LLM JSON response for inference.
Sourcefn infer_fallback(&self, entities: &[Entity]) -> InferenceResult
fn infer_fallback(&self, entities: &[Entity]) -> InferenceResult
Fallback inference when LLM is unavailable.
Uses heuristics to infer common relationships based on entity types.
Sourcepub fn inferred_to_graph_relationships(
&self,
inferred: &InferenceResult,
entity_map: &HashMap<String, Entity>,
) -> Vec<Relationship>
pub fn inferred_to_graph_relationships( &self, inferred: &InferenceResult, entity_map: &HashMap<String, Entity>, ) -> Vec<Relationship>
Converts inferred relationships to graph Relationship objects.
§Arguments
inferred- The inference result.entity_map- Map from entity name to Entity.
§Returns
A vector of Relationship objects ready for storage.
Auto Trait Implementations§
impl Freeze for EntityExtractorService
impl !RefUnwindSafe for EntityExtractorService
impl Send for EntityExtractorService
impl Sync for EntityExtractorService
impl Unpin for EntityExtractorService
impl !UnwindSafe for EntityExtractorService
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].