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