git.iko.soy/opencode-android
on d643c13 help sign in
91 lines 2.5 kB history raw
1package soy.iko.opencode.data.model
3import kotlinx.serialization.SerialName
4import kotlinx.serialization.Serializable
6/**
7 * A message part — a discriminated union on `type` (the global class discriminator).
8 * Unknown types decode to [UnknownPart] via the registered polymorphic default,
9 * so the stream survives server additions.
10 *
11 * Every part carries [id] plus its parent [messageID]/[sessionID], which the reducer
12 * uses to attach streamed parts to the right message.
13 */
14@Serializable
15sealed interface Part {
16 val id: String
17 val messageID: String?
18 val sessionID: String?
21@Serializable
22@SerialName("text")
23data class TextPart(
24 override val id: String = "",
25 override val messageID: String? = null,
26 override val sessionID: String? = null,
27 val text: String = "",
28 val synthetic: Boolean = false,
29 val ignored: Boolean = false,
30 val time: TimeInfo? = null,
31) : Part
33@Serializable
34@SerialName("reasoning")
35data class ReasoningPart(
36 override val id: String = "",
37 override val messageID: String? = null,
38 override val sessionID: String? = null,
39 val text: String = "",
40 val time: TimeInfo? = null,
41) : Part
43@Serializable
44@SerialName("tool")
45data class ToolPart(
46 override val id: String = "",
47 override val messageID: String? = null,
48 override val sessionID: String? = null,
49 val callID: String = "",
50 val tool: String = "",
51 val state: ToolState = ToolPending,
52) : Part
54@Serializable
55@SerialName("file")
56data class FilePart(
57 override val id: String = "",
58 override val messageID: String? = null,
59 override val sessionID: String? = null,
60 val mime: String? = null,
61 val filename: String? = null,
62 val url: String? = null,
63 val source: String? = null,
64) : Part
66@Serializable
67@SerialName("step-start")
68data class StepStartPart(
69 override val id: String = "",
70 override val messageID: String? = null,
71 override val sessionID: String? = null,
72) : Part
74@Serializable
75@SerialName("step-finish")
76data class StepFinishPart(
77 override val id: String = "",
78 override val messageID: String? = null,
79 override val sessionID: String? = null,
80 val cost: Double? = null,
81 val tokens: Tokens? = null,
82) : Part
84/** Fallback for an unrecognized `type`. */
85@Serializable
86@SerialName("__unknown")
87data class UnknownPart(
88 override val id: String = "",
89 override val messageID: String? = null,
90 override val sessionID: String? = null,
91) : Part