What problem does this solve?
Every other Pocket TTS language has both a lightweight 6-layer tier and a larger 24-layer tier, but French only has the 24-layer option. In PocketTtsConstants.swift, the PocketTtsLanguage enum defines:
public enum PocketTtsLanguage: String, Sendable, CaseIterable {
case english
case french24L = "french_24l"
case german
case german24L = "german_24l"
case italian
case italian24L = "italian_24l"
case portuguese
case portuguese24L = "portuguese_24l"
case spanish
case spanish24L = "spanish_24l"
English/German/Italian/Portuguese/Spanish all have a plain 6-layer case alongside their *24L counterpart. French's only case is french24L — there's no case french. transformerLayers confirms this isn't just a naming quirk:
public var transformerLayers: Int {
switch self {
case .english, .german, .italian, .portuguese, .spanish:
return 6
case .french24L, .german24L, .italian24L, .portuguese24L, .spanish24L:
return 24
}
}
This makes French a meaningful outlier for anyone building a per-language download picker: the four other non-English languages are a consistent ~527MB (6-layer, fp16), while French is the only option at the much larger 24-layer size — no smaller/consistent option exists for it at all.
Proposed solution
Publish a 6-layer French pack (same tier/size class as the existing German/Italian/Portuguese/Spanish 6-layer packs) so French isn't forced into the 24-layer-only tier, and add the corresponding case french to PocketTtsLanguage.
Alternatives considered
If a 6-layer French model isn't feasible for a quality or availability reason, it'd help to know that explicitly (e.g. a doc comment on french24L explaining why), since right now it reads like an oversight rather than a deliberate constraint.
Additional context
Noticed this while wiring up per-language Pocket TTS packs in an app that depends on this SDK — every other language mapped cleanly to a small, consistent download size, and French was the one exception.
What problem does this solve?
Every other Pocket TTS language has both a lightweight 6-layer tier and a larger 24-layer tier, but French only has the 24-layer option. In
PocketTtsConstants.swift, thePocketTtsLanguageenum defines:English/German/Italian/Portuguese/Spanish all have a plain 6-layer case alongside their
*24Lcounterpart. French's only case isfrench24L— there's nocase french.transformerLayersconfirms this isn't just a naming quirk:This makes French a meaningful outlier for anyone building a per-language download picker: the four other non-English languages are a consistent ~527MB (6-layer, fp16), while French is the only option at the much larger 24-layer size — no smaller/consistent option exists for it at all.
Proposed solution
Publish a 6-layer French pack (same tier/size class as the existing German/Italian/Portuguese/Spanish 6-layer packs) so French isn't forced into the 24-layer-only tier, and add the corresponding
case frenchtoPocketTtsLanguage.Alternatives considered
If a 6-layer French model isn't feasible for a quality or availability reason, it'd help to know that explicitly (e.g. a doc comment on
french24Lexplaining why), since right now it reads like an oversight rather than a deliberate constraint.Additional context
Noticed this while wiring up per-language Pocket TTS packs in an app that depends on this SDK — every other language mapped cleanly to a small, consistent download size, and French was the one exception.