Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
### v1.1.1 - 02/11/2025
### v1.1.1 - 04/11/2025

### Added
* Added new text embedding provider, Mini-LM
* Add `initialized` and `isInitialized` to `IEmbeddingProvider`"


### Changed
* IEmbeddingProvider is require to provider `embeddingDim` variable (used to be optional)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import android.graphics.Bitmap

interface IEmbeddingProvider<T> {
val embeddingDim: Int
suspend fun initialize()
fun isInitialized(): Boolean
fun closeSession() = Unit
suspend fun embed(data: T): FloatArray
suspend fun embedBatch(data: List<T>): List<FloatArray>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ class ClipImageEmbedder(
override val embeddingDim: Int = 512
private var closed = false

suspend fun initialize() = model.loadModel()
override suspend fun initialize() = model.loadModel()

fun isInitialized() = model.isLoaded()
override fun isInitialized() = model.isLoaded()

override suspend fun embed(bitmap: Bitmap): FloatArray = withContext(Dispatchers.Default) {
override suspend fun embed(data: Bitmap): FloatArray = withContext(Dispatchers.Default) {
if (!isInitialized()) throw IllegalStateException("Model not initialized")

val inputShape = longArrayOf(ClipConfig.DIM_BATCH_SIZE.toLong(), ClipConfig.DIM_PIXEL_SIZE.toLong(), ClipConfig.IMAGE_SIZE_X.toLong(), ClipConfig.IMAGE_SIZE_Y.toLong())
val imgData: FloatBuffer = preProcess(bitmap)
val imgData: FloatBuffer = preProcess(data)
val inputName = model.getInputNames()?.firstOrNull() ?: throw IllegalStateException("Model inputs not available")
val output = model.run(mapOf(inputName to TensorData.FloatBufferTensor(imgData, inputShape)))
normalizeL2((output.values.first() as Array<FloatArray>)[0])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ class ClipTextEmbedder(
override val embeddingDim: Int = 512
private var closed = false

suspend fun initialize() = model.loadModel()
override suspend fun initialize() = model.loadModel()

fun isInitialized() = model.isLoaded()
override fun isInitialized() = model.isLoaded()

override suspend fun embed(data: String): FloatArray = withContext(Dispatchers.Default) {
if (!isInitialized()) throw IllegalStateException("Model not initialized")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ class MiniLMTextEmbedder(
private var closed = false
override val embeddingDim: Int = 384 // MiniLM-L6-v2 dimension

suspend fun initialize() {
override suspend fun initialize() {
model.loadModel()
}

fun isInitialized() = model.isLoaded()
override fun isInitialized() = model.isLoaded()

override suspend fun embed(data: String): FloatArray = withContext(Dispatchers.Default) {
if (!isInitialized()) throw IllegalStateException("Model not initialized")
Expand Down