pub mod bedrock;
pub mod exact;
pub mod fuzzy;
pub mod issue_type_tier;
pub mod jira_project_tier;
pub mod llm;
pub mod override_tier;
pub mod regex_tier;
pub mod weighted_sum;
use serde::{Deserialize, Serialize};
use crate::classify::taxonomy::TopLevelCategory;
use crate::core::models::ClassificationMethod;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct ClassificationResult {
pub category: String,
pub subcategory: Option<String>,
#[serde(default)]
pub top_level: Option<TopLevelCategory>,
pub confidence: f64,
pub method: ClassificationMethod,
pub ticket_id: Option<String>,
#[serde(default)]
pub complexity: Option<u8>,
}
impl ClassificationResult {
pub fn unclassified() -> Self {
Self {
category: "uncategorized".to_string(),
subcategory: None,
top_level: Some(TopLevelCategory::Unknown),
confidence: 0.0,
method: ClassificationMethod::FuzzyMatch,
ticket_id: None,
complexity: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unclassified_defaults_complexity_to_none() {
let r = ClassificationResult::unclassified();
assert_eq!(r.complexity, None);
}
}