@@ -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 "
@@ -770,6 +793,25 @@ public final class KanaKanjiConverter {
770793 return ( coreMLResult. result, coreMLResult. lattice)
771794 }
772795 }
796+ #elseif Zenzai
797+ if zenzaiMode. enabled, !needTypoCorrection {
798+ let personalizationHandle = self . getZenzaiPersonalization ( mode: zenzaiMode. personalizationMode)
799+ if let zenz = self . getModel ( modelURL: zenzaiMode. weightURL) {
800+ let zenzResult = self . blockingAsync {
801+ await self . converter. all_zenzai (
802+ inputData,
803+ zenz: zenz,
804+ zenzaiCache: nil ,
805+ inferenceLimit: zenzaiMode. inferenceLimit,
806+ requestRichCandidates: zenzaiMode. requestRichCandidates,
807+ personalizationMode: personalizationHandle. map { ( $0. mode, $0. base, $0. personal) } ,
808+ versionDependentConfig: zenzaiMode. versionDependentMode,
809+ dicdataStoreState: self . dicdataStoreState
810+ )
811+ }
812+ return ( zenzResult. result, zenzResult. lattice)
813+ }
814+ }
773815#endif
774816
775817 guard let previousInputData else {
0 commit comments