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
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,12 @@ fun LlmProviderListScreen(
}

providers.forEachIndexed { index, provider ->
LlmProviderRow(provider = provider, onClick = { onEditProvider(provider.id) })
LlmProviderRow(
provider = provider,
onClick = if (provider.kind != LlmProviderKind.ON_DEVICE) {
{ onEditProvider(provider.id) }
} else null,
)
if (index != providers.lastIndex) {
HorizontalDivider(modifier = Modifier.padding(vertical = 4.dp))
}
Expand All @@ -108,7 +113,7 @@ fun LlmProviderListScreen(

/** A single provider row — resolves [LlmProvider.checkAvailability] asynchronously per-row. */
@Composable
private fun LlmProviderRow(provider: LlmProvider, onClick: () -> Unit) {
private fun LlmProviderRow(provider: LlmProvider, onClick: (() -> Unit)?) {
// produceState re-runs the suspend block whenever `provider` changes identity; starts at
// `null` ("Checking availability…") so we never render an optimistic default.
val availability by produceState<LlmProviderAvailability?>(initialValue = null, provider) {
Expand All @@ -118,7 +123,7 @@ private fun LlmProviderRow(provider: LlmProvider, onClick: () -> Unit) {
Row(
modifier = Modifier
.fillMaxWidth()
.clickable(onClick = onClick)
.then(if (onClick != null) Modifier.clickable(onClick = onClick) else Modifier)
.padding(vertical = 10.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
Expand All @@ -143,12 +148,14 @@ private fun LlmProviderRow(provider: LlmProvider, onClick: () -> Unit) {

Row(verticalAlignment = Alignment.CenterVertically) {
ProviderStatusIndicator(availability)
Spacer(modifier = Modifier.width(4.dp))
Icon(
Icons.Default.ChevronRight,
contentDescription = "Edit",
tint = MaterialTheme.colorScheme.onSurfaceVariant,
)
if (onClick != null) {
Spacer(modifier = Modifier.width(4.dp))
Icon(
Icons.Default.ChevronRight,
contentDescription = "Edit",
tint = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import dev.stapler.stelekit.llm.CustomOpenAiCompatibleLlmProvider
import dev.stapler.stelekit.llm.CustomProviderConfig
import dev.stapler.stelekit.llm.LlmCredentialStore
import dev.stapler.stelekit.llm.LlmFeature
import dev.stapler.stelekit.llm.LlmProviderKind
import dev.stapler.stelekit.llm.LlmProviderRegistry
import dev.stapler.stelekit.llm.LlmSettings
import io.ktor.client.HttpClient
Expand Down Expand Up @@ -79,9 +80,10 @@ fun LlmProviderSettings(
onEditProvider = { id ->
if (id.startsWith("custom:")) {
editingCustomProviderId = id
} else {
} else if (registry.find(id)?.kind == LlmProviderKind.REMOTE) {
editingBuiltInProviderId = id
}
// ON_DEVICE and unknown kinds have no credentials — click is intentionally a no-op
},
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ fun SuggestionBottomSheet(

if (state.llmError != null) {
Text(
text = "Could not reach LLM",
text = state.llmError,
style = MaterialTheme.typography.labelSmall,
color = MaterialTheme.colorScheme.error,
modifier = Modifier.padding(top = 8.dp),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ fun TagChipRow(
if (llmError != null) {
Spacer(modifier = Modifier.width(8.dp))
Text(
text = "Could not reach LLM",
text = llmError,
style = MaterialTheme.typography.labelSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.6f),
)
Expand Down
Loading