Skip to content

Commit ebed097

Browse files
committed
Add SafeTensors model loading support to KLlama CLI
Preparation for JavaLand 2026 workshop. Related to #10, fixes #371. - Add Q4/Q8 quantized data types to DataType enum and SafeTensors mapper - Create LlamaConfigParser for HuggingFace config.json parsing - Create LlamaSafeTensorsLoader with HF→GGUF tensor name mapping, Q4+qb dequantization, BF16/F16 conversion, and shape normalization - Add loadSafeTensors() method to LlamaIngestion - Add fromTokenizerJson() to GGUFTokenizer for HuggingFace tokenizer.json - Update CLI to detect and handle .safetensors files and model directories - Update DTypeMapping for QUANT4/QUANT8 exhaustive when branches Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3f28cc2 commit ebed097

26 files changed

Lines changed: 1218 additions & 65 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# models
22
*.gguf
33
*.onnx
4+
model-371/
45

56
local.properties
67
.gradle

skainet-apps/skainet-kgemma/api/android/skainet-kgemma.api

Lines changed: 77 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
public abstract interface class sk/ainet/apps/kgemma/AttentionBackend {
2+
public abstract fun attention (Lsk/ainet/lang/tensor/Tensor;Lsk/ainet/lang/tensor/Tensor;Lsk/ainet/lang/tensor/Tensor;II)Lsk/ainet/lang/tensor/Tensor;
3+
public abstract fun reset ()V
4+
}
5+
16
public final class sk/ainet/apps/kgemma/Gemma3nAttentionBackend : sk/ainet/apps/kgemma/AttentionBackend {
27
public fun <init> (Lsk/ainet/context/ExecutionContext;Lsk/ainet/io/gguf/gemma/Gemma3nRuntimeWeights;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nConfig;Lsk/ainet/apps/kgemma/Gemma3nKvCache;)V
38
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lsk/ainet/io/gguf/gemma/Gemma3nRuntimeWeights;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nConfig;Lsk/ainet/apps/kgemma/Gemma3nKvCache;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -6,6 +11,7 @@ public final class sk/ainet/apps/kgemma/Gemma3nAttentionBackend : sk/ainet/apps/
611
}
712

813
public final class sk/ainet/apps/kgemma/Gemma3nConfig {
14+
public static final field Companion Lsk/ainet/apps/kgemma/Gemma3nConfig$Companion;
915
public fun <init> ()V
1016
public fun <init> (IIIIIILjava/util/List;ILjava/util/List;FFI)V
1117
public synthetic fun <init> (IIIIIILjava/util/List;ILjava/util/List;FFIILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -24,34 +30,64 @@ public final class sk/ainet/apps/kgemma/Gemma3nConfig {
2430
public final fun copy (IIIIIILjava/util/List;ILjava/util/List;FFI)Lsk/ainet/apps/kgemma/Gemma3nConfig;
2531
public static synthetic fun copy$default (Lsk/ainet/apps/kgemma/Gemma3nConfig;IIIIIILjava/util/List;ILjava/util/List;FFIILjava/lang/Object;)Lsk/ainet/apps/kgemma/Gemma3nConfig;
2632
public fun equals (Ljava/lang/Object;)Z
33+
public final fun getCacheLayerIndex (I)I
34+
public final fun getEffectiveCacheLayers ()I
2735
public final fun getHeadDim ()I
2836
public final fun getHiddenSize ()I
37+
public final fun getIntermediateSize (I)I
2938
public final fun getIntermediateSizes ()Ljava/util/List;
39+
public final fun getKvDim ()I
3040
public final fun getKvSharedLayers ()I
3141
public final fun getLayerPattern ()Ljava/util/List;
42+
public final fun getLayerType (I)Lsk/ainet/io/gguf/gemma/LayerType;
3243
public final fun getNumAttentionHeads ()I
44+
public final fun getNumHeadsPerKv ()I
3345
public final fun getNumKvHeads ()I
3446
public final fun getNumLayers ()I
3547
public final fun getPerLayerHiddenSize ()I
48+
public final fun getQueryDim ()I
49+
public final fun getRopeBase (I)F
3650
public final fun getRopeBaseGlobal ()F
3751
public final fun getRopeBaseLocal ()F
3852
public final fun getSlidingWindow ()I
3953
public fun hashCode ()I
54+
public final fun isGlobalLayer (I)Z
55+
public final fun isKvShared (I)Z
56+
public final fun isLocalLayer (I)Z
4057
public fun toString ()Ljava/lang/String;
4158
}
4259

43-
public abstract interface class sk/ainet/apps/kgemma/AttentionBackend {
44-
public abstract fun attention (Lsk/ainet/lang/tensor/Tensor;Lsk/ainet/lang/tensor/Tensor;Lsk/ainet/lang/tensor/Tensor;II)Lsk/ainet/lang/tensor/Tensor;
45-
public abstract fun reset ()V
60+
public final class sk/ainet/apps/kgemma/Gemma3nConfig$Companion {
61+
public final fun fromMetadata (Lsk/ainet/io/gguf/gemma/Gemma3nModelMetadata;)Lsk/ainet/apps/kgemma/Gemma3nConfig;
62+
public final fun getDEFAULT_LAYER_PATTERN ()Ljava/util/List;
63+
public final fun getE2B_DEFAULT ()Lsk/ainet/apps/kgemma/Gemma3nConfig;
4664
}
4765

4866
public final class sk/ainet/apps/kgemma/Gemma3nIngestion {
4967
public fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nLoadConfig;)V
5068
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nLoadConfig;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
5169
public final fun load (Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
70+
public final fun loadFromSafeTensors (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
71+
public final fun loadRuntime (Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
72+
public final fun loadRuntimeFromSafeTensors (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
73+
public final fun loadRuntimeStreaming (Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
5274
public final fun loadStreaming (Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
5375
}
5476

77+
public abstract interface class sk/ainet/apps/kgemma/Gemma3nKvCache {
78+
public abstract fun getKey (IIII)F
79+
public abstract fun getKvDim ()I
80+
public abstract fun getNLayers ()I
81+
public abstract fun getSeqLen ()I
82+
public abstract fun getValue (IIII)F
83+
public abstract fun reset ()V
84+
public abstract fun store (II[FI[FI)V
85+
}
86+
87+
public final class sk/ainet/apps/kgemma/Gemma3nKvCacheKt {
88+
public static final fun createOptimalGemma3nKvCache (Lsk/ainet/apps/kgemma/Gemma3nConfig;I)Lsk/ainet/apps/kgemma/Gemma3nKvCache;
89+
}
90+
5591
public final class sk/ainet/apps/kgemma/Gemma3nLoadConfig {
5692
public fun <init> ()V
5793
public fun <init> (Lsk/ainet/io/gguf/gemma/Gemma3nWeightLoader$QuantPolicy;Z)V
@@ -67,17 +103,8 @@ public final class sk/ainet/apps/kgemma/Gemma3nLoadConfig {
67103
public fun toString ()Ljava/lang/String;
68104
}
69105

70-
public abstract interface class sk/ainet/apps/kgemma/Gemma3nKvCache {
71-
public abstract fun getKey (IIII)F
72-
public abstract fun getKvDim ()I
73-
public abstract fun getNLayers ()I
74-
public abstract fun getSeqLen ()I
75-
public abstract fun getValue (IIII)F
76-
public abstract fun reset ()V
77-
public abstract fun store (II[FI[FI)V
78-
}
79-
80106
public final class sk/ainet/apps/kgemma/Gemma3nRuntime {
107+
public static final field BOS_TOKEN I
81108
public fun <init> (Lsk/ainet/context/ExecutionContext;Lsk/ainet/io/gguf/gemma/Gemma3nRuntimeWeights;Lsk/ainet/apps/kgemma/AttentionBackend;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nConfig;FLkotlin/random/Random;)V
82109
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lsk/ainet/io/gguf/gemma/Gemma3nRuntimeWeights;Lsk/ainet/apps/kgemma/AttentionBackend;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nConfig;FLkotlin/random/Random;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
83110
public final fun forward (I)Lsk/ainet/lang/tensor/Tensor;
@@ -88,13 +115,50 @@ public final class sk/ainet/apps/kgemma/Gemma3nRuntime {
88115
}
89116

90117
public final class sk/ainet/apps/kgemma/HeapGemma3nKvCache : sk/ainet/apps/kgemma/Gemma3nKvCache {
118+
public static final field Companion Lsk/ainet/apps/kgemma/HeapGemma3nKvCache$Companion;
91119
public fun <init> (IIILjava/util/List;I)V
92120
public fun getKey (IIII)F
121+
public final fun getKeyArray ()[F
93122
public fun getKvDim ()I
94123
public fun getNLayers ()I
95124
public fun getSeqLen ()I
96125
public fun getValue (IIII)F
126+
public final fun getValueArray ()[F
97127
public fun reset ()V
98128
public fun store (II[FI[FI)V
99129
}
100130

131+
public final class sk/ainet/apps/kgemma/HeapGemma3nKvCache$Companion {
132+
public final fun fromConfig (Lsk/ainet/apps/kgemma/Gemma3nConfig;I)Lsk/ainet/apps/kgemma/HeapGemma3nKvCache;
133+
}
134+
135+
public final class sk/ainet/apps/kgemma/multimodal/AudioEncoder {
136+
public static final field Companion Lsk/ainet/apps/kgemma/multimodal/AudioEncoder$Companion;
137+
public static final field DEFAULT_FRAME_SIZE I
138+
public static final field DEFAULT_HOP_SIZE I
139+
public static final field DEFAULT_SAMPLE_RATE I
140+
public fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;III)V
141+
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;IIIILkotlin/jvm/internal/DefaultConstructorMarker;)V
142+
public final fun encode ([FI)Lsk/ainet/lang/tensor/Tensor;
143+
public static synthetic fun encode$default (Lsk/ainet/apps/kgemma/multimodal/AudioEncoder;[FIILjava/lang/Object;)Lsk/ainet/lang/tensor/Tensor;
144+
public final fun encodeFromWav ([B)Lsk/ainet/lang/tensor/Tensor;
145+
public final fun estimateTokenCount (FI)I
146+
public static synthetic fun estimateTokenCount$default (Lsk/ainet/apps/kgemma/multimodal/AudioEncoder;FIILjava/lang/Object;)I
147+
}
148+
149+
public final class sk/ainet/apps/kgemma/multimodal/AudioEncoder$Companion {
150+
}
151+
152+
public final class sk/ainet/apps/kgemma/multimodal/VisionEncoder {
153+
public static final field Companion Lsk/ainet/apps/kgemma/multimodal/VisionEncoder$Companion;
154+
public static final field DEFAULT_IMAGE_SIZE I
155+
public static final field DEFAULT_NUM_TOKENS I
156+
public fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;II)V
157+
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V
158+
public final fun encode ([FII)Lsk/ainet/lang/tensor/Tensor;
159+
public final fun encodeFromBytes ([B)Lsk/ainet/lang/tensor/Tensor;
160+
}
161+
162+
public final class sk/ainet/apps/kgemma/multimodal/VisionEncoder$Companion {
163+
}
164+

skainet-apps/skainet-kgemma/api/jvm/skainet-kgemma.api

Lines changed: 81 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
public abstract interface class sk/ainet/apps/kgemma/AttentionBackend {
2+
public abstract fun attention (Lsk/ainet/lang/tensor/Tensor;Lsk/ainet/lang/tensor/Tensor;Lsk/ainet/lang/tensor/Tensor;II)Lsk/ainet/lang/tensor/Tensor;
3+
public abstract fun reset ()V
4+
}
5+
16
public final class sk/ainet/apps/kgemma/Gemma3nAttentionBackend : sk/ainet/apps/kgemma/AttentionBackend {
27
public fun <init> (Lsk/ainet/context/ExecutionContext;Lsk/ainet/io/gguf/gemma/Gemma3nRuntimeWeights;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nConfig;Lsk/ainet/apps/kgemma/Gemma3nKvCache;)V
38
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lsk/ainet/io/gguf/gemma/Gemma3nRuntimeWeights;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nConfig;Lsk/ainet/apps/kgemma/Gemma3nKvCache;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -6,6 +11,7 @@ public final class sk/ainet/apps/kgemma/Gemma3nAttentionBackend : sk/ainet/apps/
611
}
712

813
public final class sk/ainet/apps/kgemma/Gemma3nConfig {
14+
public static final field Companion Lsk/ainet/apps/kgemma/Gemma3nConfig$Companion;
915
public fun <init> ()V
1016
public fun <init> (IIIIIILjava/util/List;ILjava/util/List;FFI)V
1117
public synthetic fun <init> (IIIIIILjava/util/List;ILjava/util/List;FFIILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -24,34 +30,64 @@ public final class sk/ainet/apps/kgemma/Gemma3nConfig {
2430
public final fun copy (IIIIIILjava/util/List;ILjava/util/List;FFI)Lsk/ainet/apps/kgemma/Gemma3nConfig;
2531
public static synthetic fun copy$default (Lsk/ainet/apps/kgemma/Gemma3nConfig;IIIIIILjava/util/List;ILjava/util/List;FFIILjava/lang/Object;)Lsk/ainet/apps/kgemma/Gemma3nConfig;
2632
public fun equals (Ljava/lang/Object;)Z
33+
public final fun getCacheLayerIndex (I)I
34+
public final fun getEffectiveCacheLayers ()I
2735
public final fun getHeadDim ()I
2836
public final fun getHiddenSize ()I
37+
public final fun getIntermediateSize (I)I
2938
public final fun getIntermediateSizes ()Ljava/util/List;
39+
public final fun getKvDim ()I
3040
public final fun getKvSharedLayers ()I
3141
public final fun getLayerPattern ()Ljava/util/List;
42+
public final fun getLayerType (I)Lsk/ainet/io/gguf/gemma/LayerType;
3243
public final fun getNumAttentionHeads ()I
44+
public final fun getNumHeadsPerKv ()I
3345
public final fun getNumKvHeads ()I
3446
public final fun getNumLayers ()I
3547
public final fun getPerLayerHiddenSize ()I
48+
public final fun getQueryDim ()I
49+
public final fun getRopeBase (I)F
3650
public final fun getRopeBaseGlobal ()F
3751
public final fun getRopeBaseLocal ()F
3852
public final fun getSlidingWindow ()I
3953
public fun hashCode ()I
54+
public final fun isGlobalLayer (I)Z
55+
public final fun isKvShared (I)Z
56+
public final fun isLocalLayer (I)Z
4057
public fun toString ()Ljava/lang/String;
4158
}
4259

43-
public abstract interface class sk/ainet/apps/kgemma/AttentionBackend {
44-
public abstract fun attention (Lsk/ainet/lang/tensor/Tensor;Lsk/ainet/lang/tensor/Tensor;Lsk/ainet/lang/tensor/Tensor;II)Lsk/ainet/lang/tensor/Tensor;
45-
public abstract fun reset ()V
60+
public final class sk/ainet/apps/kgemma/Gemma3nConfig$Companion {
61+
public final fun fromMetadata (Lsk/ainet/io/gguf/gemma/Gemma3nModelMetadata;)Lsk/ainet/apps/kgemma/Gemma3nConfig;
62+
public final fun getDEFAULT_LAYER_PATTERN ()Ljava/util/List;
63+
public final fun getE2B_DEFAULT ()Lsk/ainet/apps/kgemma/Gemma3nConfig;
4664
}
4765

4866
public final class sk/ainet/apps/kgemma/Gemma3nIngestion {
4967
public fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nLoadConfig;)V
5068
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nLoadConfig;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
5169
public final fun load (Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
70+
public final fun loadFromSafeTensors (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
71+
public final fun loadRuntime (Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
72+
public final fun loadRuntimeFromSafeTensors (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
73+
public final fun loadRuntimeStreaming (Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
5274
public final fun loadStreaming (Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
5375
}
5476

77+
public abstract interface class sk/ainet/apps/kgemma/Gemma3nKvCache {
78+
public abstract fun getKey (IIII)F
79+
public abstract fun getKvDim ()I
80+
public abstract fun getNLayers ()I
81+
public abstract fun getSeqLen ()I
82+
public abstract fun getValue (IIII)F
83+
public abstract fun reset ()V
84+
public abstract fun store (II[FI[FI)V
85+
}
86+
87+
public final class sk/ainet/apps/kgemma/Gemma3nKvCacheKt {
88+
public static final fun createOptimalGemma3nKvCache (Lsk/ainet/apps/kgemma/Gemma3nConfig;I)Lsk/ainet/apps/kgemma/Gemma3nKvCache;
89+
}
90+
5591
public final class sk/ainet/apps/kgemma/Gemma3nLoadConfig {
5692
public fun <init> ()V
5793
public fun <init> (Lsk/ainet/io/gguf/gemma/Gemma3nWeightLoader$QuantPolicy;Z)V
@@ -67,17 +103,8 @@ public final class sk/ainet/apps/kgemma/Gemma3nLoadConfig {
67103
public fun toString ()Ljava/lang/String;
68104
}
69105

70-
public abstract interface class sk/ainet/apps/kgemma/Gemma3nKvCache {
71-
public abstract fun getKey (IIII)F
72-
public abstract fun getKvDim ()I
73-
public abstract fun getNLayers ()I
74-
public abstract fun getSeqLen ()I
75-
public abstract fun getValue (IIII)F
76-
public abstract fun reset ()V
77-
public abstract fun store (II[FI[FI)V
78-
}
79-
80106
public final class sk/ainet/apps/kgemma/Gemma3nRuntime {
107+
public static final field BOS_TOKEN I
81108
public fun <init> (Lsk/ainet/context/ExecutionContext;Lsk/ainet/io/gguf/gemma/Gemma3nRuntimeWeights;Lsk/ainet/apps/kgemma/AttentionBackend;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nConfig;FLkotlin/random/Random;)V
82109
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lsk/ainet/io/gguf/gemma/Gemma3nRuntimeWeights;Lsk/ainet/apps/kgemma/AttentionBackend;Lkotlin/reflect/KClass;Lsk/ainet/apps/kgemma/Gemma3nConfig;FLkotlin/random/Random;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
83110
public final fun forward (I)Lsk/ainet/lang/tensor/Tensor;
@@ -88,13 +115,54 @@ public final class sk/ainet/apps/kgemma/Gemma3nRuntime {
88115
}
89116

90117
public final class sk/ainet/apps/kgemma/HeapGemma3nKvCache : sk/ainet/apps/kgemma/Gemma3nKvCache {
118+
public static final field Companion Lsk/ainet/apps/kgemma/HeapGemma3nKvCache$Companion;
91119
public fun <init> (IIILjava/util/List;I)V
92120
public fun getKey (IIII)F
121+
public final fun getKeyArray ()[F
93122
public fun getKvDim ()I
94123
public fun getNLayers ()I
95124
public fun getSeqLen ()I
96125
public fun getValue (IIII)F
126+
public final fun getValueArray ()[F
97127
public fun reset ()V
98128
public fun store (II[FI[FI)V
99129
}
100130

131+
public final class sk/ainet/apps/kgemma/HeapGemma3nKvCache$Companion {
132+
public final fun fromConfig (Lsk/ainet/apps/kgemma/Gemma3nConfig;I)Lsk/ainet/apps/kgemma/HeapGemma3nKvCache;
133+
}
134+
135+
public final class sk/ainet/apps/kgemma/cli/MainKt {
136+
public static final fun main ([Ljava/lang/String;)V
137+
}
138+
139+
public final class sk/ainet/apps/kgemma/multimodal/AudioEncoder {
140+
public static final field Companion Lsk/ainet/apps/kgemma/multimodal/AudioEncoder$Companion;
141+
public static final field DEFAULT_FRAME_SIZE I
142+
public static final field DEFAULT_HOP_SIZE I
143+
public static final field DEFAULT_SAMPLE_RATE I
144+
public fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;III)V
145+
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;IIIILkotlin/jvm/internal/DefaultConstructorMarker;)V
146+
public final fun encode ([FI)Lsk/ainet/lang/tensor/Tensor;
147+
public static synthetic fun encode$default (Lsk/ainet/apps/kgemma/multimodal/AudioEncoder;[FIILjava/lang/Object;)Lsk/ainet/lang/tensor/Tensor;
148+
public final fun encodeFromWav ([B)Lsk/ainet/lang/tensor/Tensor;
149+
public final fun estimateTokenCount (FI)I
150+
public static synthetic fun estimateTokenCount$default (Lsk/ainet/apps/kgemma/multimodal/AudioEncoder;FIILjava/lang/Object;)I
151+
}
152+
153+
public final class sk/ainet/apps/kgemma/multimodal/AudioEncoder$Companion {
154+
}
155+
156+
public final class sk/ainet/apps/kgemma/multimodal/VisionEncoder {
157+
public static final field Companion Lsk/ainet/apps/kgemma/multimodal/VisionEncoder$Companion;
158+
public static final field DEFAULT_IMAGE_SIZE I
159+
public static final field DEFAULT_NUM_TOKENS I
160+
public fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;II)V
161+
public synthetic fun <init> (Lsk/ainet/context/ExecutionContext;Lkotlin/reflect/KClass;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V
162+
public final fun encode ([FII)Lsk/ainet/lang/tensor/Tensor;
163+
public final fun encodeFromBytes ([B)Lsk/ainet/lang/tensor/Tensor;
164+
}
165+
166+
public final class sk/ainet/apps/kgemma/multimodal/VisionEncoder$Companion {
167+
}
168+

0 commit comments

Comments
 (0)