feat: provider presets (openai, openrouter, ollama, dahl, gonkarouter, custom), /api/info, provider display in Android settings
This commit is contained in:
parent
d2ec0848c8
commit
7b92e259ad
14 changed files with 233 additions and 18 deletions
|
|
@ -40,6 +40,8 @@ class ByteClawApi(private val settings: ServerSettings) {
|
|||
http.newCall(Request.Builder().url(url("/healthz")).build()).execute().use { it.isSuccessful }
|
||||
}
|
||||
|
||||
suspend fun info(): ServerInfo = json.decodeFromString(call(Request.Builder().url(url("/api/info")).build()))
|
||||
|
||||
suspend fun sessions(): List<Session> = json.decodeFromString(call(Request.Builder().url(url("/api/sessions")).build()))
|
||||
|
||||
suspend fun messages(sessionId: String): List<Message> =
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import android.app.Application
|
|||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dev.byteclaw.client.data.ByteClawApi
|
||||
import dev.byteclaw.client.data.ProviderPresets
|
||||
import dev.byteclaw.client.data.ServerSettings
|
||||
import dev.byteclaw.client.data.Session
|
||||
import dev.byteclaw.client.data.SettingsStore
|
||||
|
|
@ -39,7 +40,8 @@ class ChatViewModel(app: Application) : AndroidViewModel(app) {
|
|||
|
||||
fun testConnection(s: ServerSettings, onResult: (String) -> Unit) = viewModelScope.launch {
|
||||
val msg = runCatching {
|
||||
ByteClawApi(s).sessions(); "Verbindung OK"
|
||||
val i = ByteClawApi(s).info()
|
||||
"Verbindung OK · Provider: ${ProviderPresets.label(i.provider)} · Modell: ${i.model}"
|
||||
}.getOrElse { "Fehler: ${it.message}" }
|
||||
onResult(msg)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -158,6 +158,9 @@ fun SettingsScreen(vm: ChatViewModel, state: UiState, onBack: () -> Unit) {
|
|||
}) { Text("Verbindung testen") }
|
||||
}
|
||||
status?.let { Text(it) }
|
||||
Text("Der LLM-Provider (z. B. Dahl, GonkaRouter) wird am Server über llm.provider gewählt. " +
|
||||
"Verbindung testen zeigt den aktiven Provider und das Modell.",
|
||||
style = MaterialTheme.typography.bodySmall)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package dev.byteclaw.client
|
|||
|
||||
import dev.byteclaw.client.data.AgentEvent
|
||||
import dev.byteclaw.client.data.Message
|
||||
import dev.byteclaw.client.data.ProviderPresets
|
||||
import dev.byteclaw.client.data.ServerInfo
|
||||
import kotlinx.serialization.json.Json
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
|
@ -19,4 +21,11 @@ class ModelsTest {
|
|||
"""{"id":2,"role":"assistant","content":"","tool_calls":[{"id":"c1","name":"time_now","arguments":"{}"}],"created_at":"x"}""")
|
||||
assertEquals("time_now", m.toolCalls.single().name)
|
||||
}
|
||||
|
||||
@Test fun decodesServerInfoAndLabels() {
|
||||
val i = json.decodeFromString(ServerInfo.serializer(), """{"provider":"gonkarouter","model":"MiniMaxAI/MiniMax-M2.7","base_url":"https://api.gonkarouter.io/v1"}""")
|
||||
assertEquals("GonkaRouter", ProviderPresets.label(i.provider))
|
||||
assertEquals("Dahl (dahl.global)", ProviderPresets.label("dahl"))
|
||||
assertEquals("x", ProviderPresets.label("x"))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue