Skip to content

Commit ddfa88d

Browse files
committed
Restore llama Zenz load path when CoreML trait is off
1 parent c926ae3 commit ddfa88d

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

Sources/KanaKanjiConverterModule/ConverterAPI/KanaKanjiConverter.swift

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)