diff --git a/README.md b/README.md index 0874a86..40b5711 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Then wrap your TFLite interpreter: ```kotlin val wildEdge = WildEdge.getInstance() val interpreter = wildEdge.decorate( - Interpreter(modelFile, Interpreter.Options()), modelFile, modelVersion = "1.0" + Interpreter(modelFile, Interpreter.Options()), modelFile ) interpreter.run(inputBuffer, outputBuffer) @@ -133,7 +133,7 @@ val interpreter = wildEdge.decorate( val modelFile = File(modelPath) // e.g. "face_detector_fp16.onnx" val session = wildEdge.decorate( env.createSession(modelFile.absolutePath, OrtSession.SessionOptions()), - modelFile, modelVersion = "1.0" + modelFile ) // modelId = "face_detector_fp16", quantization = "f16" @@ -155,7 +155,7 @@ faceDetector.process(image).trackWith(handle) { faces -> ```kotlin val handle = wildEdge.registerLiteRtModel( - "gemma-3n", modelVersion = "1.0", quantization = "int4" + "gemma-3n", quantization = "int4" ) val inputMeta = WildEdge.analyzeText(userInput) @@ -171,7 +171,7 @@ Captures total duration, time to first token, tokens/sec, and estimated tokens i ```kotlin val interpreter = wildEdge.decorate( InterpreterApi.create(modelFile, InterpreterApi.Options()), - modelFile, modelVersion = "1.0" + modelFile ) interpreter.run(inputBuffer, outputBuffer) @@ -369,8 +369,8 @@ Integrate the WildEdge Android SDK (dev.wildedge:wildedge-android) into this pro GenerationOutputMeta(tokensIn = r.usage.promptTokens, tokensOut = r.usage.completionTokens).toMap() } For decorator integrations, assign the result to the same variable name as the original - so call sites don't change. Pass a real modelVersion string (check the model filename, - asset path, or any version constant in the code). + so call sites don't change. Only pass modelVersion if you find a real version string + in the model filename, asset path, or an existing version constant. For streaming LLM output (Flow) use flow.trackWith(handle). 3. Set up WildEdge (pick one): diff --git a/examples/gallery/GalleryExample.kt b/examples/gallery/GalleryExample.kt index b43701a..89358a4 100644 --- a/examples/gallery/GalleryExample.kt +++ b/examples/gallery/GalleryExample.kt @@ -23,7 +23,7 @@ class GalleryExample { private val engine = run { val start = System.currentTimeMillis() val engine = Engine(config).also { it.initialize() } - wildEdge.decorate(engine, config, loadDurationMs = (System.currentTimeMillis() - start).toInt(), modelVersion = "1.0", accelerator = Accelerator.GPU) + wildEdge.decorate(engine, config, loadDurationMs = (System.currentTimeMillis() - start).toInt(), accelerator = Accelerator.GPU) } private val conversation = engine.createConversation() diff --git a/examples/onnx/OnnxExample.kt b/examples/onnx/OnnxExample.kt index a8371f6..857d7d1 100644 --- a/examples/onnx/OnnxExample.kt +++ b/examples/onnx/OnnxExample.kt @@ -22,7 +22,6 @@ class OnnxExample(context: Context) { private val session = wildEdge.decorate( OrtEnvironment.getEnvironment().createSession(modelFile.absolutePath, OrtSession.SessionOptions()), modelFile, - modelVersion = "1.0", ) fun run(bitmap: Bitmap, inputs: Map) = session.run( diff --git a/gradle.properties b/gradle.properties index 739f654..dfba214 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,5 @@ android.useAndroidX=true +org.gradle.jvmargs=-Xmx3g -XX:MaxMetaspaceSize=512m GROUP=dev.wildedge VERSION_NAME=0.1.0 diff --git a/samples/image-classification/src/main/kotlin/dev/wildedge/sample/imageclassification/MainActivity.kt b/samples/image-classification/src/main/kotlin/dev/wildedge/sample/imageclassification/MainActivity.kt index e962add..cc88c01 100644 --- a/samples/image-classification/src/main/kotlin/dev/wildedge/sample/imageclassification/MainActivity.kt +++ b/samples/image-classification/src/main/kotlin/dev/wildedge/sample/imageclassification/MainActivity.kt @@ -54,7 +54,6 @@ class MainActivity : AppCompatActivity() { "mobilenet-v1", ModelInfo( modelName = "MobileNet V1", - modelVersion = "1.0", modelSource = "remote", modelFormat = "tflite", quantization = "uint8", @@ -84,7 +83,6 @@ class MainActivity : AppCompatActivity() { wildEdge.decorate( interpreter, modelId = "mobilenet-v1", - modelVersion = "1.0", quantization = "uint8", ), inShape, diff --git a/samples/local-llm-agent/src/main/kotlin/dev/wildedge/sample/localllmagent/MainActivity.kt b/samples/local-llm-agent/src/main/kotlin/dev/wildedge/sample/localllmagent/MainActivity.kt index 0420afa..f35de12 100644 --- a/samples/local-llm-agent/src/main/kotlin/dev/wildedge/sample/localllmagent/MainActivity.kt +++ b/samples/local-llm-agent/src/main/kotlin/dev/wildedge/sample/localllmagent/MainActivity.kt @@ -68,7 +68,6 @@ class MainActivity : AppCompatActivity() { modelFile.nameWithoutExtension, ModelInfo( modelName = modelFile.nameWithoutExtension, - modelVersion = "1.0", modelSource = "remote", modelFormat = "litertlm", inputModality = InputModality.Text, diff --git a/samples/local-llm/src/main/kotlin/dev/wildedge/sample/localllm/MainActivity.kt b/samples/local-llm/src/main/kotlin/dev/wildedge/sample/localllm/MainActivity.kt index a039cbf..08a395c 100644 --- a/samples/local-llm/src/main/kotlin/dev/wildedge/sample/localllm/MainActivity.kt +++ b/samples/local-llm/src/main/kotlin/dev/wildedge/sample/localllm/MainActivity.kt @@ -57,7 +57,6 @@ class MainActivity : AppCompatActivity() { modelFile.nameWithoutExtension, ModelInfo( modelName = modelFile.nameWithoutExtension, - modelVersion = "1.0", modelSource = "remote", modelFormat = "litertlm", inputModality = InputModality.Text, diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/ModelInfo.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/ModelInfo.kt index 69c8168..787e1df 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/ModelInfo.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/ModelInfo.kt @@ -4,7 +4,7 @@ package dev.wildedge.sdk * Metadata describing a registered model. * * @property modelName Human-readable model name. - * @property modelVersion Semantic version string. + * @property modelVersion Semantic version string. `null` if unknown. * @property modelSource Origin of the model (e.g. "huggingface", "custom"). * @property modelFormat Runtime format (e.g. "tflite", "onnx", "gguf"). * @property modelFamily Optional model family (e.g. "llama", "gemma"). @@ -14,7 +14,7 @@ package dev.wildedge.sdk */ data class ModelInfo( val modelName: String, - val modelVersion: String, + val modelVersion: String? = null, val modelSource: String, val modelFormat: String, val modelFamily: String? = null, diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/core/ModelRegistry.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/core/ModelRegistry.kt index b5be011..c5ec3fa 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/core/ModelRegistry.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/core/ModelRegistry.kt @@ -43,7 +43,7 @@ internal class ModelRegistry(private val persistFile: File? = null) { val obj = root.optJSONObject(modelId) ?: continue val modelName = obj.optStringOrNull("model_name") ?: continue - val modelVersion = obj.optStringOrNull("model_version") ?: continue + val modelVersion = obj.optStringOrNull("model_version") val modelSource = obj.optStringOrNull("model_source") ?: continue val modelFormat = obj.optStringOrNull("model_format") ?: continue diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/GoogleAiTracking.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/GoogleAiTracking.kt index 3bbe13c..8d3f03d 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/GoogleAiTracking.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/GoogleAiTracking.kt @@ -21,7 +21,7 @@ import kotlinx.coroutines.flow.flow fun WildEdgeClient.registerGoogleAiModel( modelId: String, modelName: String = modelId, - modelVersion: String = "unknown", + modelVersion: String? = null, modelFamily: String? = "gemini", ): ModelHandle = registerModel( modelId, diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/LiteRtEngineDecorator.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/LiteRtEngineDecorator.kt index 7c54c0d..d2ebb66 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/LiteRtEngineDecorator.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/LiteRtEngineDecorator.kt @@ -35,7 +35,7 @@ fun WildEdgeClient.decorate( engine: Engine, config: EngineConfig, loadDurationMs: Int = 0, - modelVersion: String = "unknown", + modelVersion: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, ): LiteRtEngineDecorator { val modelFile = File(config.modelPath) @@ -60,7 +60,7 @@ fun WildEdgeClient.decorate( engine: Engine, loadDurationMs: Int = 0, modelId: String, - modelVersion: String = "unknown", + modelVersion: String? = null, quantization: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, ): LiteRtEngineDecorator { diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/LiteRtTracking.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/LiteRtTracking.kt index c8f0bb8..1787e25 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/LiteRtTracking.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/LiteRtTracking.kt @@ -15,7 +15,7 @@ import dev.wildedge.sdk.events.TextInputMeta fun WildEdgeClient.registerLiteRtModel( modelId: String, modelName: String = modelId, - modelVersion: String = "unknown", + modelVersion: String? = null, quantization: String? = null, ): ModelHandle = registerModel( modelId, diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/MlKitTracking.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/MlKitTracking.kt index 26af728..17f17f8 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/MlKitTracking.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/MlKitTracking.kt @@ -14,7 +14,7 @@ fun WildEdgeClient.registerMlKitModel( modelId: String, modelName: String = modelId, modelSource: String = "mlkit", - modelVersion: String = "unknown", + modelVersion: String? = null, ): ModelHandle = registerModel( modelId, ModelInfo( diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/OrtDecorator.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/OrtDecorator.kt index a155df6..7cd69fb 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/OrtDecorator.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/OrtDecorator.kt @@ -18,7 +18,7 @@ class OrtDecorator( private val session: OrtSession, private val wildEdge: WildEdgeClient, modelId: String, - modelVersion: String = "unknown", + modelVersion: String? = null, quantization: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, private val labels: List? = null, @@ -84,7 +84,7 @@ class OrtDecorator( fun WildEdgeClient.decorate( session: OrtSession, modelFile: File, - modelVersion: String = "unknown", + modelVersion: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, labels: List? = null, numClasses: Int = labels?.size ?: 0, @@ -103,7 +103,7 @@ fun WildEdgeClient.decorate( fun WildEdgeClient.decorate( session: OrtSession, modelId: String, - modelVersion: String = "unknown", + modelVersion: String? = null, quantization: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, labels: List? = null, diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/PlayServicesTfliteDecorator.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/PlayServicesTfliteDecorator.kt index 453a687..0baa45b 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/PlayServicesTfliteDecorator.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/PlayServicesTfliteDecorator.kt @@ -18,7 +18,7 @@ class PlayServicesTfliteDecorator( private val interpreter: InterpreterApi, wildEdge: WildEdgeClient, modelId: String, - modelVersion: String = "unknown", + modelVersion: String? = null, quantization: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, private val labels: List? = null, @@ -79,7 +79,7 @@ class PlayServicesTfliteDecorator( fun WildEdgeClient.decorate( interpreter: InterpreterApi, modelFile: File, - modelVersion: String = "unknown", + modelVersion: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, labels: List? = null, numClasses: Int = labels?.size ?: 0, @@ -98,7 +98,7 @@ fun WildEdgeClient.decorate( fun WildEdgeClient.decorate( interpreter: InterpreterApi, modelId: String, - modelVersion: String = "unknown", + modelVersion: String? = null, quantization: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, labels: List? = null, diff --git a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/TFLiteDecorator.kt b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/TFLiteDecorator.kt index 3e2a209..33e88ee 100644 --- a/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/TFLiteDecorator.kt +++ b/wildedge/src/main/kotlin/dev/wildedge/sdk/integrations/TFLiteDecorator.kt @@ -17,7 +17,7 @@ class TFLiteDecorator( private val interpreter: Interpreter, private val wildEdge: WildEdgeClient, modelId: String, - modelVersion: String = "unknown", + modelVersion: String? = null, quantization: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, private val labels: List? = null, @@ -87,7 +87,7 @@ class TFLiteDecorator( fun WildEdgeClient.decorate( interpreter: Interpreter, modelFile: File, - modelVersion: String = "unknown", + modelVersion: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, labels: List? = null, numClasses: Int = labels?.size ?: 0, @@ -106,7 +106,7 @@ fun WildEdgeClient.decorate( fun WildEdgeClient.decorate( interpreter: Interpreter, modelId: String, - modelVersion: String = "unknown", + modelVersion: String? = null, quantization: String? = null, accelerator: dev.wildedge.sdk.Accelerator? = null, labels: List? = null,