🚥 iOS 本地 AI:利用 Swift Package Traits 切換使用 AnyLanguageModel

分享兩個踩坑 AnyLanguageModel 過程中實際遇到的問題與解法。一個我發了熱騰騰的 PR,另一個則是借用相同的 Swift Package 機制來實現切換依賴模組。

延續上一篇文章,我們要來研究把 Foundation Models framework 替換成 AnyLanguageModel

我原本規劃的文章內容與時程,被研究進度耽擱了。所以,我就把實際遇到的問題,以及目前的解法分享出來。我覺得這才是最真實、且有趣的專欄經營方式。

Add Identifiable Conformance to PartiallyGenerated

如同前文提到的,AnyLanguageModel 截至 0.5.2 版的 @Generable macros,沒有像 Foundation Models framework 的版本,有替 PartiallyGenerated type 加上 id property,以及 Identifiable

這個 id 會方便我們在 SwiftUI 當中使用生成的物件,特別是在 ForEach

我希望 AIPlayground 可以輕鬆在兩個框架之間切換,所以這個問題必須被解決。

於是,我研究了一下如何修改 macros,結果意外地簡單。因為我們不是要從頭寫一遍,有 Foundation Models 的版本可以參考。

如果我們寫一個 Foundation Models 的 @Generable type,並且用 Xcode 的 Expand Macro 功能展開,會看到原本的 type 會被插入類似這樣的程式碼: