From fe9baace7f236b1dbfb99c02f07d5521da913105 Mon Sep 17 00:00:00 2001 From: Han Yin Date: Sun, 6 Jul 2025 18:02:04 -0700 Subject: [PATCH] remote: refine HuggingFaceModel data class --- .../data/remote/HuggingFaceApiService.kt | 3 +- .../llama/data/remote/HuggingFaceModel.kt | 30 +++++++++++++++---- .../remote/HuggingFaceRemoteDataSource.kt | 11 ++++--- .../java/com/example/llama/di/AppModule.kt | 9 ++++-- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceApiService.kt b/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceApiService.kt index 2508971fce..a4c296f1e9 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceApiService.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceApiService.kt @@ -14,7 +14,8 @@ interface HuggingFaceApiService { @Query("filter") filter: String? = null, @Query("sort") sort: String? = null, @Query("direction") direction: String? = null, - @Query("limit") limit: Int? = null + @Query("limit") limit: Int? = null, + @Query("full") full: Boolean? = null, ): List @GET("api/models/{modelId}") diff --git a/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceModel.kt b/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceModel.kt index b08f6ddea4..3e5c1fa739 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceModel.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceModel.kt @@ -1,14 +1,32 @@ package com.example.llama.data.remote +import java.util.Date + data class HuggingFaceModel( + val _id: String, val id: String, val modelId: String, + + val author: String, + val createdAt: Date?, + val lastModified: Date?, + + val library_name: String?, + val pipeline_tag: String?, + val tags: List?, + + val private: Boolean?, + val gated: Boolean?, + val likes: Int?, val trendingScore: Int?, - val private: Boolean?, val downloads: Int?, - val tags: List?, - val pipeline_tag: String?, - val library_name: String?, - val createdAt: String? -) + + val sha: String?, + + val siblings: List?, +) { + data class Sibling( + val rfilename: String, + ) +} diff --git a/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceRemoteDataSource.kt b/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceRemoteDataSource.kt index f459929ab0..7f77069dec 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceRemoteDataSource.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/data/remote/HuggingFaceRemoteDataSource.kt @@ -9,11 +9,12 @@ import javax.inject.Singleton interface HuggingFaceRemoteDataSource { suspend fun searchModels( - query: String? = "gguf", + query: String? = "gguf q4_0", filter: String? = "text-generation", // Only generative models, sort: String? = "downloads", direction: String? = "-1", - limit: Int? = 20 + limit: Int? = 20, + full: Boolean = true, ): List suspend fun getModelDetails(modelId: String): HuggingFaceModelDetails @@ -31,14 +32,16 @@ class HuggingFaceRemoteDataSourceImpl @Inject constructor( filter: String?, sort: String?, direction: String?, - limit: Int? + limit: Int?, + full: Boolean, ) = withContext(Dispatchers.IO) { apiService.getModels( search = query, filter = filter, sort = sort, direction = direction, - limit = limit + limit = limit, + full = full, ) } diff --git a/examples/llama.android/app/src/main/java/com/example/llama/di/AppModule.kt b/examples/llama.android/app/src/main/java/com/example/llama/di/AppModule.kt index ff53da9d62..508be94bfa 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/di/AppModule.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/di/AppModule.kt @@ -21,6 +21,7 @@ import com.example.llama.engine.ModelLoadingService import com.example.llama.engine.StubInferenceEngine import com.example.llama.engine.StubTierDetection import com.example.llama.monitoring.PerformanceMonitor +import com.google.gson.GsonBuilder import dagger.Binds import dagger.Module import dagger.Provides @@ -33,6 +34,8 @@ import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import javax.inject.Singleton +private const val HUGGINGFACE_DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" + @Module @InstallIn(SingletonComponent::class) internal abstract class AppModule { @@ -61,7 +64,7 @@ internal abstract class AppModule { ): HuggingFaceRemoteDataSource companion object { - private const val USE_STUB_ENGINE = false + const val USE_STUB_ENGINE = false @Provides fun provideInferenceEngine(@ApplicationContext context: Context): InferenceEngine { @@ -111,7 +114,9 @@ internal abstract class AppModule { Retrofit.Builder() .baseUrl("https://huggingface.co/") .client(okHttpClient) - .addConverterFactory(GsonConverterFactory.create()) + .addConverterFactory(GsonConverterFactory.create( + GsonBuilder().setDateFormat(HUGGINGFACE_DATETIME_FORMAT).create() + )) .build() .create(HuggingFaceApiService::class.java) }