fix(android): fall back on legacy talk errors

This commit is contained in:
Ayaan Zaidi
2026-04-05 08:13:45 +05:30
parent dd6b160707
commit e4fe853439
2 changed files with 26 additions and 2 deletions

View File

@@ -41,7 +41,7 @@ internal class TalkSpeakClient(
if (!response.ok) {
val error = response.error
val message = error?.message ?: "talk.speak request failed"
return if (isFallbackEligible(error?.details?.reason)) {
return if (isFallbackEligible(error)) {
TalkSpeakResult.FallbackToLocal(message)
} else {
TalkSpeakResult.Failure(message)
@@ -74,7 +74,9 @@ internal class TalkSpeakClient(
)
}
private fun isFallbackEligible(reason: String?): Boolean {
private fun isFallbackEligible(error: GatewaySession.ErrorShape?): Boolean {
val reason = error?.details?.reason
if (reason == null) return true
return reason == "talk_unconfigured" ||
reason == "talk_provider_unsupported" ||
reason == "method_unavailable"

View File

@@ -103,4 +103,26 @@ class TalkSpeakClientTest {
val result = client.synthesize(text = "Hello", directive = null)
assertTrue(result is TalkSpeakResult.Failure)
}
@Test
fun fallsBackWhenGatewayOmitsReason() = runTest {
val client =
TalkSpeakClient(
requestDetailed = { _, _, _ ->
GatewaySession.RpcResult(
ok = false,
payloadJson = null,
error =
GatewaySession.ErrorShape(
code = "INVALID_REQUEST",
message = "unknown method: talk.speak",
details = null,
),
)
},
)
val result = client.synthesize(text = "Hello", directive = null)
assertTrue(result is TalkSpeakResult.FallbackToLocal)
}
}