Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
db54298
Migrate main screens to Material3 excepet settings
kul3r4 Jul 3, 2025
0fa6198
Remove deprecated WearDataLayerAppHelper methods (#2446)
oas004 Jul 1, 2025
416e498
Update dependency com.squareup.okio:okio 3.14.0 to v3.15.0 (#2639)
renovate-bot Jul 2, 2025
4147852
Update all dependencies (#2641)
yschimke Jul 3, 2025
038b704
Update all dependencies 5.0.0-alpha.17 to v5.0.0 (#2642)
renovate-bot Jul 3, 2025
cf82876
Update dependency gradle 8.14.2 to v8.14.3 (#2644)
renovate-bot Jul 5, 2025
1e8ff35
Update all dependencies 1.45.1 to v1.46.1 (#2645)
renovate-bot Jul 6, 2025
bfff7a3
Update all dependencies (#2646)
renovate-bot Jul 8, 2025
75f9906
Update dependency com.google.android.gms:play-services-base 18.7.1 to…
renovate-bot Jul 10, 2025
2cc2dd7
Switch AI module to m3 (#2647)
yschimke Jul 10, 2025
1fc71d5
Update dependency com.android.tools.build:gradle 8.11.0 to v8.11.1 (#…
renovate-bot Jul 11, 2025
2bddee1
Updates to M3 and genai SDK (#2650)
yschimke Jul 11, 2025
e97b16e
Refactor hiltViewModel import (#2652)
yschimke Jul 11, 2025
6621853
Support images in AI sample (#2651)
yschimke Jul 11, 2025
e607941
Use Tools in the Standalone sample (#2653)
yschimke Jul 11, 2025
acc3c63
Update gradle.properties
yschimke Jul 14, 2025
0f6ba04
Increase text contrast (#2655)
ithinkihaveacat Jul 18, 2025
6dfa95c
Update publishing setup (#2658)
yschimke Jul 18, 2025
5ffa2b9
Update all dependencies (#2656)
renovate-bot Jul 18, 2025
db789b7
Update dependency com.diffplug.spotless 7.1.0 to v7.2.0 (#2660)
renovate-bot Jul 21, 2025
001f45a
Update dependency com.diffplug.spotless 7.2.0 to v7.2.1 (#2661)
renovate-bot Jul 22, 2025
8704345
Update all dependencies (#2663)
renovate-bot Jul 24, 2025
6f1f403
Update all dependencies 1.8.0-rc01 to v1.8.0-rc02 (#2664)
renovate-bot Jul 26, 2025
69780ac
Adds the FastScrollingTransformingLazyColumn into Horologist (#2662)
brysonPaul Jul 28, 2025
75bd5a2
Update screenshots (#2666)
yschimke Jul 28, 2025
d30af1f
using RotaryScrollableBehavior to perform RSB actions + speedups to t…
brysonPaul Jul 29, 2025
cc18616
use flingBehavior to disable fast scrolling on a fling action instead…
brysonPaul Jul 30, 2025
2106dd6
Fix R8 build issue (#2671)
yschimke Jul 31, 2025
0eed652
Update gradle.properties
yschimke Aug 12, 2025
2c51f12
Add API for capturing composable in Tiles (#2674)
yschimke Aug 14, 2025
43c14ca
Cleanup the coroutines code in CaptureComposable.kt (#2676)
yschimke Aug 15, 2025
b961b7c
Update CaptureComposable.kt (#2677)
yschimke Aug 15, 2025
36fc5d0
Update kotlin (#2675)
renovate-bot Aug 15, 2025
5ec6654
Update all dependencies (#2678)
yschimke Aug 15, 2025
6a5351b
Speed ups to the SectionIndicator composable to prevent unnecessary r…
brysonPaul Aug 18, 2025
2d09ee2
Tiles: Use a display context as was intended (#2680)
yschimke Aug 19, 2025
57b497a
Handle other dispatchers (#2682)
yschimke Aug 20, 2025
34c423d
Support configurable encoding (#2683)
yschimke Aug 20, 2025
870c74d
Switch away from ProcessLifecycleOwner (#2684)
yschimke Aug 22, 2025
4de2c16
Fix closing the activity scenario (#2686)
yschimke Aug 27, 2025
79f318b
Bump VERSION_NAME to 0.8.3-alpha
yschimke Aug 27, 2025
975f67a
Remove extra withContext (#2687)
yschimke Aug 27, 2025
e095b79
Implement material3 SelectAccountScreen (#2659)
caleb-allen Aug 28, 2025
844cc01
Update all dependencies (#2670)
renovate-bot Sep 2, 2025
1f15492
Update VERSION_NAME to 0.8.3 (#2689)
yschimke Sep 2, 2025
43c4bfd
Material3 SignedInConfirmationScreen (#2688)
caleb-allen Sep 3, 2025
35cd28b
Update SignInPromptScreen to compose-material3 (#2691)
jason-sigma Sep 4, 2025
96cba4a
Revert "Update SignInPromptScreen to compose-material3 (#2691)" (#2694)
luizgrp Sep 10, 2025
d9b2a6d
Adds yields to animations to ensure subcompositions during compositio…
brysonPaul Sep 17, 2025
fa6f566
Migrate main screens to Material3 excepet settings
kul3r4 Jul 3, 2025
2e8dd4b
Separate colors for Tiles
kul3r4 Sep 19, 2025
13d57fe
update target sdk
kul3r4 Sep 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/android_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
TERM: dumb

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

Expand All @@ -29,7 +29,7 @@ jobs:
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
Expand Down
30 changes: 15 additions & 15 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,18 @@ jobs:
timeout-minutes: 40

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
java-version: 21

- name: Unit Tests
uses: gradle/gradle-build-action@v3
Expand All @@ -55,18 +55,18 @@ jobs:
timeout-minutes: 40

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
java-version: 21

- name: Unit Tests
uses: gradle/gradle-build-action@v3
Expand All @@ -93,18 +93,18 @@ jobs:
timeout-minutes: 40

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
java-version: 21

- name: Unit Tests 2
uses: gradle/gradle-build-action@v3
Expand Down Expand Up @@ -134,18 +134,18 @@ jobs:
TERM: dumb

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
java-version: 21

- name: Compile tests
uses: gradle/gradle-build-action@v3
Expand All @@ -160,18 +160,18 @@ jobs:
timeout-minutes: 40

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
java-version: 21

- name: Setup Gradle
uses: gradle/gradle-build-action@v3
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build_nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ jobs:
timeout-minutes: 40

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/fixup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@ jobs:
timeout-minutes: 40

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
java-version: 21

- name: Reformat
uses: gradle/gradle-build-action@v3
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/macrobenchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ jobs:
TERM: dumb

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/publish-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ jobs:
TERM: dumb

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
lfs: 'true'

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: set up JDK
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 17
Expand Down
4 changes: 3 additions & 1 deletion ai/sample/core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ android {
compileSdk = 36

defaultConfig {
minSdk = 21
minSdk = 23

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down Expand Up @@ -117,6 +117,8 @@ dependencies {
implementation(projects.datalayer.grpc)
ksp(libs.dagger.hiltandroidcompiler)

implementation(libs.grpc.stub)

implementation(platform(libs.compose.bom))
implementation(libs.kotlin.stdlib)
implementation(libs.kotlinx.coroutines.core)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.stateIn
Expand Down Expand Up @@ -77,7 +78,7 @@ class InferenceService
}
}

suspend fun submit(prompt: Prompt): Response {
suspend fun submit(prompt: Prompt): ResponseBundle {
val currentModel = connectedModel.value ?: throw Exception("No model selected")

val (_, service) = models.value?.first { it.first.modelsList.find { it.modelId == currentModel } != null }
Expand All @@ -91,11 +92,31 @@ class InferenceService
)
}

suspend fun submitStream(prompt: Prompt): Flow<Response> {
val currentModel = connectedModel.value ?: throw Exception("No model selected")

val (_, service) = models.value?.first { it.first.modelsList.find { it.modelId == currentModel } != null }
?: throw Exception("Service missing")

return service.answerPromptWithStream(
promptRequest {
this.prompt = prompt
this.modelId = currentModel
},
)
}

fun selectModel(modelId: ModelId) {
connectedModel.value = modelId
}

fun clearModel() {
connectedModel.value = null
}

suspend fun currentKnownModels(): List<ModelId> {
return models.filterNotNull().first().flatMap {
it.first.modelsList.map { it.modelId }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,13 @@ package com.google.android.horologist.ai.core.binder
import com.google.android.horologist.ai.core.InferenceServiceGrpcKt
import com.google.android.horologist.ai.core.PromptRequest
import com.google.android.horologist.ai.core.Response
import com.google.android.horologist.ai.core.ResponseBundle
import com.google.android.horologist.ai.core.ServiceInfo
import com.google.protobuf.Empty
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.emitAll
import kotlinx.coroutines.flow.flow

class BinderInferenceService(
val stub: InferenceServiceGrpcKt.InferenceServiceCoroutineStub,
Expand All @@ -37,7 +42,13 @@ class BinderInferenceService(
}
}

override suspend fun answerPrompt(request: PromptRequest): Response {
override suspend fun answerPrompt(request: PromptRequest): ResponseBundle {
return stub.answerPrompt(request)
}

override fun answerPromptWithStream(request: PromptRequest): Flow<Response> {
return flow {
emitAll(answerPrompt(request).responsesList.asFlow())
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,7 @@ class BinderInferenceServiceRegistry(
)
}
}

override val priority: Int
get() = 1
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,18 @@ import com.google.android.gms.wearable.Node
import com.google.android.horologist.ai.core.InferenceServiceGrpcKt
import com.google.android.horologist.ai.core.PromptRequest
import com.google.android.horologist.ai.core.Response
import com.google.android.horologist.ai.core.ResponseBundle
import com.google.android.horologist.ai.core.ServiceInfo
import com.google.android.horologist.ai.core.copy
import com.google.android.horologist.data.TargetNodeId
import com.google.android.horologist.data.WearDataLayerRegistry
import com.google.android.horologist.datalayer.grpc.GrpcExtensions.grpcClient
import com.google.protobuf.Empty
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.emitAll
import kotlinx.coroutines.flow.flow

class DataLayerInferenceService(
dataLayerRegistry: WearDataLayerRegistry,
Expand All @@ -46,7 +51,13 @@ class DataLayerInferenceService(
}
}

override suspend fun answerPrompt(request: PromptRequest): Response {
override suspend fun answerPrompt(request: PromptRequest): ResponseBundle {
return proxy.answerPrompt(request)
}

override fun answerPromptWithStream(request: PromptRequest): Flow<Response> {
return flow {
emitAll(answerPrompt(request).responsesList.asFlow())
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,12 @@ class DataLayerInferenceServiceRegistry(
override fun models(): Flow<List<InferenceServiceGrpcKt.InferenceServiceCoroutineImplBase>> {
return flow {
val allCapabilities = dataLayerRegistry.capabilityClient.getAllCapabilities(CapabilityClient.FILTER_ALL).await()
println("Capabilties")
allCapabilities.forEach { (key, list) ->
println(key)
list.nodes.forEach {
println(it.id + " " + it.displayName + " " + it.isNearby)
}
}
println("End")

val capabilities = dataLayerRegistry.capabilityClient.getCapability(
CAPABILITY_INFERENCE_SERVICE,
Expand All @@ -54,6 +52,9 @@ class DataLayerInferenceServiceRegistry(
}
}

override val priority: Int
get() = 2

companion object {
val CAPABILITY_INFERENCE_SERVICE = "InferenceService"
}
Expand Down
Loading