mod heuristics;
mod llm_enrichment;
#[cfg(test)]
mod tests;
use serde::{Deserialize, Serialize};
use crate::x_api::types::{Tweet, User};
pub use heuristics::extract_heuristics;
pub use llm_enrichment::enrich_with_llm;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Confidence {
High,
Medium,
Low,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Provenance {
Bio,
Tweets,
BioAndTweets,
ProfileUrl,
DisplayName,
Default,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InferredField<T: Serialize> {
pub value: T,
pub confidence: Confidence,
pub provenance: Provenance,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InferredProfile {
pub account_type: InferredField<String>,
pub product_name: InferredField<String>,
pub product_description: InferredField<String>,
pub product_url: InferredField<Option<String>>,
pub target_audience: InferredField<String>,
pub product_keywords: InferredField<Vec<String>>,
pub industry_topics: InferredField<Vec<String>>,
pub brand_voice: InferredField<Option<String>>,
}
pub struct ProfileInput {
pub user: User,
pub tweets: Vec<Tweet>,
}
pub fn compute_base_confidence(bio_len: usize, tweet_count: usize) -> Confidence {
if bio_len > 20 && tweet_count >= 10 {
Confidence::High
} else if bio_len > 0 || tweet_count >= 5 {
Confidence::Medium
} else {
Confidence::Low
}
}