intent recognition added (first implementation)
This commit is contained in:
parent
0c28304840
commit
5f1f9ce321
20 changed files with 625 additions and 255 deletions
62
crates/jarvis-core/src/intent.rs
Normal file
62
crates/jarvis-core/src/intent.rs
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
mod intentclassifier;
|
||||
|
||||
use std::path::PathBuf;
|
||||
|
||||
use crate::{JCommandsList, commands::JCommand, config};
|
||||
use once_cell::sync::OnceCell;
|
||||
use crate::config::structs::IntentRecognitionEngine;
|
||||
|
||||
static IRE_TYPE: OnceCell<IntentRecognitionEngine> = OnceCell::new();
|
||||
|
||||
pub async fn init(commands: &Vec<JCommandsList>) -> Result<(), String> {
|
||||
if IRE_TYPE.get().is_some() {
|
||||
return Ok(());
|
||||
} // already initialized
|
||||
|
||||
// set default ire type
|
||||
// @TODO. Make it configurable?
|
||||
IRE_TYPE.set(config::DEFAULT_INTENT_RECOGNITION_ENGINE).unwrap();
|
||||
|
||||
// load given recorder
|
||||
match IRE_TYPE.get().unwrap() {
|
||||
IntentRecognitionEngine::IntentClassifier => {
|
||||
info!("Initializing IRE backend.");
|
||||
intentclassifier::init(&commands).await?;
|
||||
info!("IRE backend initialized.");
|
||||
},
|
||||
IntentRecognitionEngine::Rasa => todo!(),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn classify(text: &str) -> Option<(String, f64)> {
|
||||
match IRE_TYPE.get()? {
|
||||
IntentRecognitionEngine::IntentClassifier => {
|
||||
match intentclassifier::classify(text).await {
|
||||
Ok(prediction) => {
|
||||
let confidence = prediction.confidence.value();
|
||||
if confidence >= config::INTENT_CLASSIFIER_MIN_CONFIDENCE {
|
||||
Some((prediction.intent.to_string(), confidence))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
error!("Intent classification error: {}", e);
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
IntentRecognitionEngine::Rasa => todo!(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_command_by_intent(commands: &'static Vec<JCommandsList>, intent_id: &str) -> Option<(&'static PathBuf, &'static JCommand)> {
|
||||
match IRE_TYPE.get()? {
|
||||
IntentRecognitionEngine::IntentClassifier => {
|
||||
intentclassifier::get_command(commands, intent_id)
|
||||
}
|
||||
IntentRecognitionEngine::Rasa => todo!(),
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue