@@ -47,6 +47,9 @@ public final class KanaKanjiConverter {
4747 private var zenzaiPersonalization : ( mode: ConvertRequestOptions . ZenzaiMode . PersonalizationMode , base: EfficientNGram , personal: EfficientNGram ) ?
4848 public private( set) var zenzStatus : String = " "
4949 var dicdataStoreState : DicdataStoreState
50+ #if Zenzai
51+ private var zenzaiModel : Zenz ?
52+ #endif
5053#if ZenzaiCoreML && canImport(CoreML)
5154 private var coreMLServiceStorage : Any ?
5255 private var zenzaiCoreMLCache : Kana2Kanji . ZenzaiCache ?
@@ -84,6 +87,8 @@ public final class KanaKanjiConverter {
8487 self . coreMLServiceStorage = nil
8588 }
8689 self . zenzaiCoreMLCache = nil
90+ #elseif Zenzai
91+ self . zenzaiModel = nil
8792#endif
8893 self . zenzaiPersonalization = nil
8994 self . previousInputData = nil
@@ -117,6 +122,24 @@ public final class KanaKanjiConverter {
117122 await self . resolvedCoreMLService ( ) . getOrLoadModel ( modelURL: modelURL)
118123 }
119124 }
125+ #elseif Zenzai
126+ package func getModel( modelURL: URL ) -> Zenz ? {
127+ if let cached = self . zenzaiModel, cached. resourceURL == modelURL {
128+ self . updateZenzStatus ( " load \( modelURL. absoluteString) " )
129+ return cached
130+ }
131+ let model = self . blockingAsync {
132+ try ? await Zenz ( resourceURL: modelURL)
133+ }
134+ if let model {
135+ self . updateZenzStatus ( " load \( modelURL. absoluteString) " )
136+ self . zenzaiModel = model
137+ return model
138+ } else {
139+ self . updateZenzStatus ( " zenz model unavailable " )
140+ return nil
141+ }
142+ }
120143#else
121144 package func getModel( modelURL: URL ) -> Zenz ? {
122145 self . zenzStatus = " zenz-v2 model unavailable on this platform "
@@ -791,6 +814,25 @@ public final class KanaKanjiConverter {
791814 return ( coreMLResult. result, coreMLResult. lattice)
792815 }
793816 }
817+ #elseif Zenzai
818+ if zenzaiMode. enabled, !needTypoCorrection {
819+ let personalizationHandle = self . getZenzaiPersonalization ( mode: zenzaiMode. personalizationMode)
820+ if let zenz = self . getModel ( modelURL: zenzaiMode. weightURL) {
821+ let zenzResult = self . blockingAsync {
822+ await self . converter. all_zenzai (
823+ inputData,
824+ zenz: zenz,
825+ zenzaiCache: nil ,
826+ inferenceLimit: zenzaiMode. inferenceLimit,
827+ requestRichCandidates: zenzaiMode. requestRichCandidates,
828+ personalizationMode: personalizationHandle. map { ( $0. mode, $0. base, $0. personal) } ,
829+ versionDependentConfig: zenzaiMode. versionDependentMode,
830+ dicdataStoreState: self . dicdataStoreState
831+ )
832+ }
833+ return ( zenzResult. result, zenzResult. lattice)
834+ }
835+ }
794836#endif
795837
796838 guard let previousInputData else {
0 commit comments