@@ -268,7 +268,7 @@ pub struct ModernBertClassifier {
268
268
}
269
269
270
270
lazy_static:: lazy_static! {
271
- static ref MODERNBERT_CLASSIFIER : Arc <Mutex <Option <ModernBertClassifier >>> = Arc :: new( Mutex :: new( None ) ) ;
271
+ static ref MODERNBERT_CLASSIFIER : Arc <Mutex <Option <Arc < ModernBertClassifier > >>> = Arc :: new( Mutex :: new( None ) ) ;
272
272
static ref MODERNBERT_PII_CLASSIFIER : Arc <Mutex <Option <ModernBertClassifier >>> = Arc :: new( Mutex :: new( None ) ) ;
273
273
static ref MODERNBERT_JAILBREAK_CLASSIFIER : Arc <Mutex <Option <ModernBertClassifier >>> = Arc :: new( Mutex :: new( None ) ) ;
274
274
}
@@ -830,7 +830,7 @@ pub extern "C" fn init_modernbert_classifier(model_id: *const c_char, use_cpu: b
830
830
match ModernBertClassifier :: new ( model_id, use_cpu) {
831
831
Ok ( classifier) => {
832
832
let mut bert_opt = MODERNBERT_CLASSIFIER . lock ( ) . unwrap ( ) ;
833
- * bert_opt = Some ( classifier) ;
833
+ * bert_opt = Some ( Arc :: new ( classifier) ) ;
834
834
true
835
835
}
836
836
Err ( e) => {
@@ -930,20 +930,23 @@ pub extern "C" fn classify_modernbert_text(text: *const c_char) -> ModernBertCla
930
930
}
931
931
} ;
932
932
933
- let bert_opt = MODERNBERT_CLASSIFIER . lock ( ) . unwrap ( ) ;
934
- match & * bert_opt {
935
- Some ( classifier) => match classifier. classify_text ( text) {
936
- Ok ( ( class_idx, confidence) ) => ModernBertClassificationResult {
937
- class : class_idx as i32 ,
938
- confidence,
939
- } ,
940
- Err ( e) => {
941
- eprintln ! ( "Error classifying text with ModernBERT: {e}" ) ;
942
- default_result
943
- }
944
- } ,
945
- None => {
933
+ let classifier_arc = {
934
+ let guard = MODERNBERT_CLASSIFIER . lock ( ) . unwrap ( ) ;
935
+ if let Some ( arc) = guard. as_ref ( ) {
936
+ Arc :: clone ( arc)
937
+ } else {
946
938
eprintln ! ( "ModernBERT classifier not initialized" ) ;
939
+ return default_result;
940
+ }
941
+ } ;
942
+
943
+ match classifier_arc. classify_text ( text) {
944
+ Ok ( ( class_idx, confidence) ) => ModernBertClassificationResult {
945
+ class : class_idx as i32 ,
946
+ confidence,
947
+ } ,
948
+ Err ( e) => {
949
+ eprintln ! ( "Error classifying text with ModernBERT: {e}" ) ;
947
950
default_result
948
951
}
949
952
}
@@ -968,28 +971,31 @@ pub extern "C" fn classify_modernbert_text_with_probabilities(
968
971
}
969
972
} ;
970
973
971
- let bert_opt = MODERNBERT_CLASSIFIER . lock ( ) . unwrap ( ) ;
972
- match & * bert_opt {
973
- Some ( classifier) => match classifier. classify_text_with_probs ( text) {
974
- Ok ( ( class_idx, confidence, probabilities) ) => {
975
- // Allocate memory for probabilities array
976
- let prob_len = probabilities. len ( ) ;
977
- let prob_ptr = Box :: into_raw ( probabilities. into_boxed_slice ( ) ) as * mut f32 ;
978
-
979
- ModernBertClassificationResultWithProbs {
980
- class : class_idx as i32 ,
981
- confidence,
982
- probabilities : prob_ptr,
983
- num_classes : prob_len as i32 ,
984
- }
985
- }
986
- Err ( e) => {
987
- eprintln ! ( "Error classifying text with probabilities using ModernBERT: {e}" ) ;
988
- default_result
989
- }
990
- } ,
991
- None => {
974
+ let classifier_arc = {
975
+ let guard = MODERNBERT_CLASSIFIER . lock ( ) . unwrap ( ) ;
976
+ if let Some ( arc) = guard. as_ref ( ) {
977
+ Arc :: clone ( arc)
978
+ } else {
992
979
eprintln ! ( "ModernBERT classifier not initialized" ) ;
980
+ return default_result;
981
+ }
982
+ } ;
983
+
984
+ match classifier_arc. classify_text_with_probs ( text) {
985
+ Ok ( ( class_idx, confidence, probabilities) ) => {
986
+ // Allocate memory for probabilities array
987
+ let prob_len = probabilities. len ( ) ;
988
+ let prob_ptr = Box :: into_raw ( probabilities. into_boxed_slice ( ) ) as * mut f32 ;
989
+
990
+ ModernBertClassificationResultWithProbs {
991
+ class : class_idx as i32 ,
992
+ confidence,
993
+ probabilities : prob_ptr,
994
+ num_classes : prob_len as i32 ,
995
+ }
996
+ }
997
+ Err ( e) => {
998
+ eprintln ! ( "Error classifying text with probabilities using ModernBERT: {e}" ) ;
993
999
default_result
994
1000
}
995
1001
}
0 commit comments