Очки: история диалога в свайпе + распознавание в LLM только по клику (касяки 1-3)

This commit is contained in:
2026-08-23 20:15:21 +03:00
parent 51049d56a8
commit 706cc10d1e
9 changed files with 254 additions and 28 deletions
@@ -96,6 +96,16 @@ data class SttDone(val full: String) : HostToGlasses
@SerialName("stt_cancel")
class SttCancel : HostToGlasses
/** Один элемент истории сессии (только user/assistant — tool/calls очкам не нужны). */
@Serializable
@SerialName("chat_history_item")
data class ChatHistoryItem(val role: String, val content: String)
/** История сессии для очков (показ всего диалога со скроллом свайпами). */
@Serializable
@SerialName("chat_history")
data class ChatHistoryMsg(val sessionId: String?, val messages: List<ChatHistoryItem>) : HostToGlasses
/** Полное выключение приложения на очках (по команде с телефона). */
@Serializable
@SerialName("shutdown")
@@ -222,4 +222,28 @@ class HostToGlassesTest {
val decoded = json.decodeFromString(HostToGlasses.serializer(), text)
assertIs<SttCancel>(decoded)
}
@Test
fun chatHistoryRoundTrip() {
val msg: HostToGlasses = ChatHistoryMsg(
sessionId = "s-1",
messages = listOf(
ChatHistoryItem(role = "user", content = "привет"),
ChatHistoryItem(role = "assistant", content = "здравствуй"),
),
)
val text = json.encodeToString(HostToGlasses.serializer(), msg)
assertEquals(
"""{"type":"chat_history","sessionId":"s-1","messages":[""" +
"""{"role":"user","content":"привет"},""" +
"""{"role":"assistant","content":"здравствуй"}]}""",
text,
)
val decoded = json.decodeFromString(HostToGlasses.serializer(), text)
assertIs<ChatHistoryMsg>(decoded)
assertEquals(2, decoded.messages.size)
assertEquals("user", decoded.messages[0].role)
assertEquals("привет", decoded.messages[0].content)
assertEquals("assistant", decoded.messages[1].role)
}
}