# Consumer ProGuard rules for Leap SDK
# These rules are automatically applied to apps that use the Leap SDK AAR

# Keep native methods (called from JNI)
-keepclasseswithmembernames class * {
    native <methods>;
}

# Keep inference engine JNI classes and methods
-keep class ai.liquid.inference_engine.** { *; }

# Keep ModelRunner and related interfaces used via reflection
-keep class ai.liquid.leap.ModelRunner { *; }
-keep class ai.liquid.leap.Conversation { *; }
-keep class ai.liquid.leap.GenerationCallback { *; }

# Keep serialization classes for Manifest and options
-keep class ai.liquid.leap.Manifest { *; }
-keep class ai.liquid.leap.GenerationOptions { *; }
-keep class ai.liquid.leap.QuantizationOptions { *; }

# Keep function calling related classes
-keep class ai.liquid.leap.LeapFunction { *; }
-keep class ai.liquid.leap.LeapFunctionCall { *; }

# Kotlinx Serialization support
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt
-keepclassmembers class kotlinx.serialization.json.** {
    *** Companion;
}
-keepclasseswithmembers class kotlinx.serialization.json.** {
    kotlinx.serialization.KSerializer serializer(...);
}

# If using kotlinx.serialization with @Serializable
-keep,includedescriptorclasses class ai.liquid.leap.**$$serializer { *; }
-keepclassmembers class ai.liquid.leap.** {
    *** Companion;
}
-keepclasseswithmembers class ai.liquid.leap.** {
    kotlinx.serialization.KSerializer serializer(...);
}

# Ktor client (used for model downloading) - allow shrinking but suppress warnings
-dontwarn io.ktor.**

# Coroutines support
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepclassmembers class kotlinx.coroutines.** {
    volatile <fields>;
}
