Skip to content

Commit ad82052

Browse files
authored
Add missing title, size and annotation attributes on Resource/ResourceTemplate and other types (#219)
* Add missing resource and resource template title and size * Add missing annotations * Add serialization test for Annotations * Dump APIs
1 parent 6bae987 commit ad82052

File tree

3 files changed

+168
-20
lines changed

3 files changed

+168
-20
lines changed

kotlin-sdk-core/api/kotlin-sdk-core.api

Lines changed: 73 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,46 @@
1+
public final class io/modelcontextprotocol/kotlin/sdk/Annotations {
2+
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/Annotations$Companion;
3+
public fun <init> (Ljava/util/List;Lkotlin/time/Instant;Ljava/lang/Double;)V
4+
public final fun component1 ()Ljava/util/List;
5+
public final fun component2 ()Lkotlin/time/Instant;
6+
public final fun component3 ()Ljava/lang/Double;
7+
public final fun copy (Ljava/util/List;Lkotlin/time/Instant;Ljava/lang/Double;)Lio/modelcontextprotocol/kotlin/sdk/Annotations;
8+
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/Annotations;Ljava/util/List;Lkotlin/time/Instant;Ljava/lang/Double;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/Annotations;
9+
public fun equals (Ljava/lang/Object;)Z
10+
public final fun getAudience ()Ljava/util/List;
11+
public final fun getLastModified ()Lkotlin/time/Instant;
12+
public final fun getPriority ()Ljava/lang/Double;
13+
public fun hashCode ()I
14+
public fun toString ()Ljava/lang/String;
15+
}
16+
17+
public final synthetic class io/modelcontextprotocol/kotlin/sdk/Annotations$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
18+
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/Annotations$$serializer;
19+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
20+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/Annotations;
21+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
22+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
23+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)V
24+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
25+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
26+
}
27+
28+
public final class io/modelcontextprotocol/kotlin/sdk/Annotations$Companion {
29+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
30+
}
31+
132
public final class io/modelcontextprotocol/kotlin/sdk/AudioContent : io/modelcontextprotocol/kotlin/sdk/PromptMessageContentMultimodal {
233
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/AudioContent$Companion;
334
public static final field TYPE Ljava/lang/String;
4-
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
35+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)V
36+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
537
public final fun component1 ()Ljava/lang/String;
638
public final fun component2 ()Ljava/lang/String;
7-
public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/AudioContent;
8-
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/AudioContent;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/AudioContent;
39+
public final fun component3 ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
40+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)Lio/modelcontextprotocol/kotlin/sdk/AudioContent;
41+
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/AudioContent;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/AudioContent;
942
public fun equals (Ljava/lang/Object;)Z
43+
public final fun getAnnotations ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
1044
public final fun getData ()Ljava/lang/String;
1145
public final fun getMimeType ()Ljava/lang/String;
1246
public fun getType ()Ljava/lang/String;
@@ -671,11 +705,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/CustomRequest$Companion {
671705
public final class io/modelcontextprotocol/kotlin/sdk/EmbeddedResource : io/modelcontextprotocol/kotlin/sdk/PromptMessageContent {
672706
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/EmbeddedResource$Companion;
673707
public static final field TYPE Ljava/lang/String;
674-
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;)V
708+
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)V
709+
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
675710
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;
676-
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;)Lio/modelcontextprotocol/kotlin/sdk/EmbeddedResource;
677-
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/EmbeddedResource;Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/EmbeddedResource;
711+
public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
712+
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)Lio/modelcontextprotocol/kotlin/sdk/EmbeddedResource;
713+
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/EmbeddedResource;Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/EmbeddedResource;
678714
public fun equals (Ljava/lang/Object;)Z
715+
public final fun getAnnotations ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
679716
public final fun getResource ()Lio/modelcontextprotocol/kotlin/sdk/ResourceContents;
680717
public fun getType ()Ljava/lang/String;
681718
public fun hashCode ()I
@@ -841,12 +878,15 @@ public final class io/modelcontextprotocol/kotlin/sdk/GetPromptResult$Companion
841878
public final class io/modelcontextprotocol/kotlin/sdk/ImageContent : io/modelcontextprotocol/kotlin/sdk/PromptMessageContentMultimodal {
842879
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/ImageContent$Companion;
843880
public static final field TYPE Ljava/lang/String;
844-
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
881+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)V
882+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
845883
public final fun component1 ()Ljava/lang/String;
846884
public final fun component2 ()Ljava/lang/String;
847-
public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/ImageContent;
848-
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/ImageContent;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/ImageContent;
885+
public final fun component3 ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
886+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)Lio/modelcontextprotocol/kotlin/sdk/ImageContent;
887+
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/ImageContent;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/ImageContent;
849888
public fun equals (Ljava/lang/Object;)Z
889+
public final fun getAnnotations ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
850890
public final fun getData ()Ljava/lang/String;
851891
public final fun getMimeType ()Ljava/lang/String;
852892
public fun getType ()Ljava/lang/String;
@@ -2180,17 +2220,24 @@ public final class io/modelcontextprotocol/kotlin/sdk/RequestResult$Companion {
21802220

21812221
public final class io/modelcontextprotocol/kotlin/sdk/Resource {
21822222
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/Resource$Companion;
2183-
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
2223+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)V
2224+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
21842225
public final fun component1 ()Ljava/lang/String;
21852226
public final fun component2 ()Ljava/lang/String;
21862227
public final fun component3 ()Ljava/lang/String;
21872228
public final fun component4 ()Ljava/lang/String;
2188-
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/Resource;
2189-
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/Resource;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/Resource;
2229+
public final fun component5 ()Ljava/lang/String;
2230+
public final fun component6 ()Ljava/lang/Long;
2231+
public final fun component7 ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
2232+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)Lio/modelcontextprotocol/kotlin/sdk/Resource;
2233+
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/Resource;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/Resource;
21902234
public fun equals (Ljava/lang/Object;)Z
2235+
public final fun getAnnotations ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
21912236
public final fun getDescription ()Ljava/lang/String;
21922237
public final fun getMimeType ()Ljava/lang/String;
21932238
public final fun getName ()Ljava/lang/String;
2239+
public final fun getSize ()Ljava/lang/Long;
2240+
public final fun getTitle ()Ljava/lang/String;
21942241
public final fun getUri ()Ljava/lang/String;
21952242
public fun hashCode ()I
21962243
public fun toString ()Ljava/lang/String;
@@ -2283,17 +2330,22 @@ public final class io/modelcontextprotocol/kotlin/sdk/ResourceListChangedNotific
22832330

22842331
public final class io/modelcontextprotocol/kotlin/sdk/ResourceTemplate {
22852332
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/ResourceTemplate$Companion;
2286-
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
2333+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)V
2334+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
22872335
public final fun component1 ()Ljava/lang/String;
22882336
public final fun component2 ()Ljava/lang/String;
22892337
public final fun component3 ()Ljava/lang/String;
22902338
public final fun component4 ()Ljava/lang/String;
2291-
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/ResourceTemplate;
2292-
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/ResourceTemplate;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/ResourceTemplate;
2339+
public final fun component5 ()Ljava/lang/String;
2340+
public final fun component6 ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
2341+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)Lio/modelcontextprotocol/kotlin/sdk/ResourceTemplate;
2342+
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/ResourceTemplate;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/ResourceTemplate;
22932343
public fun equals (Ljava/lang/Object;)Z
2344+
public final fun getAnnotations ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
22942345
public final fun getDescription ()Ljava/lang/String;
22952346
public final fun getMimeType ()Ljava/lang/String;
22962347
public final fun getName ()Ljava/lang/String;
2348+
public final fun getTitle ()Ljava/lang/String;
22972349
public final fun getUriTemplate ()Ljava/lang/String;
22982350
public fun hashCode ()I
22992351
public fun toString ()Ljava/lang/String;
@@ -2775,12 +2827,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/TextContent : io/modelcont
27752827
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/TextContent$Companion;
27762828
public static final field TYPE Ljava/lang/String;
27772829
public fun <init> ()V
2778-
public fun <init> (Ljava/lang/String;)V
2779-
public synthetic fun <init> (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2830+
public fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)V
2831+
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
27802832
public final fun component1 ()Ljava/lang/String;
2781-
public final fun copy (Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/TextContent;
2782-
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/TextContent;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/TextContent;
2833+
public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
2834+
public final fun copy (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;)Lio/modelcontextprotocol/kotlin/sdk/TextContent;
2835+
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/TextContent;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/Annotations;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/TextContent;
27832836
public fun equals (Ljava/lang/Object;)Z
2837+
public final fun getAnnotations ()Lio/modelcontextprotocol/kotlin/sdk/Annotations;
27842838
public final fun getText ()Ljava/lang/String;
27852839
public fun getType ()Ljava/lang/String;
27862840
public fun hashCode ()I

kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types.kt

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import kotlin.concurrent.atomics.AtomicLong
1717
import kotlin.concurrent.atomics.ExperimentalAtomicApi
1818
import kotlin.concurrent.atomics.incrementAndFetch
1919
import kotlin.jvm.JvmInline
20+
import kotlin.time.ExperimentalTime
21+
import kotlin.time.Instant
2022

2123
public const val LATEST_PROTOCOL_VERSION: String = "2025-03-26"
2224

@@ -710,6 +712,18 @@ public data class Resource(
710712
* The MIME type of this resource, if known.
711713
*/
712714
val mimeType: String?,
715+
/**
716+
* The optional human-readable name of this resource for display purposes.
717+
*/
718+
val title: String? = null,
719+
/**
720+
* The optional size of this resource in bytes, if known.
721+
*/
722+
val size: Long? = null,
723+
/**
724+
* Optional annotations for the client.
725+
*/
726+
val annotations: Annotations? = null,
713727
)
714728

715729
/**
@@ -738,6 +752,14 @@ public data class ResourceTemplate(
738752
* The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type.
739753
*/
740754
val mimeType: String?,
755+
/**
756+
* The optional human-readable name of this resource for display purposes.
757+
*/
758+
val title: String? = null,
759+
/**
760+
* Optional annotations for the client.
761+
*/
762+
val annotations: Annotations? = null,
741763
)
742764

743765
/**
@@ -971,6 +993,11 @@ public data class TextContent(
971993
* The text content of the message.
972994
*/
973995
val text: String? = null,
996+
997+
/**
998+
* Optional annotations for the client.
999+
*/
1000+
val annotations: Annotations? = null,
9741001
) : PromptMessageContentMultimodal {
9751002
override val type: String = TYPE
9761003

@@ -993,6 +1020,11 @@ public data class ImageContent(
9931020
* The MIME type of the image. Different providers may support different image types.
9941021
*/
9951022
val mimeType: String,
1023+
1024+
/**
1025+
* Optional annotations for the client.
1026+
*/
1027+
val annotations: Annotations? = null,
9961028
) : PromptMessageContentMultimodal {
9971029
override val type: String = TYPE
9981030

@@ -1015,6 +1047,11 @@ public data class AudioContent(
10151047
* The MIME type of the audio. Different providers may support different audio types.
10161048
*/
10171049
val mimeType: String,
1050+
1051+
/**
1052+
* Optional annotations for the client.
1053+
*/
1054+
val annotations: Annotations? = null,
10181055
) : PromptMessageContentMultimodal {
10191056
override val type: String = TYPE
10201057

@@ -1033,7 +1070,17 @@ public data class UnknownContent(override val type: String) : PromptMessageConte
10331070
* The contents of a resource, embedded into a prompt or tool call result.
10341071
*/
10351072
@Serializable
1036-
public data class EmbeddedResource(val resource: ResourceContents) : PromptMessageContent {
1073+
public data class EmbeddedResource(
1074+
/**
1075+
* The contents of the embedded resource.
1076+
*/
1077+
val resource: ResourceContents,
1078+
1079+
/**
1080+
* Optional annotations for the client.
1081+
*/
1082+
val annotations: Annotations? = null,
1083+
) : PromptMessageContent {
10371084
override val type: String = TYPE
10381085

10391086
public companion object {
@@ -1051,6 +1098,34 @@ public enum class Role {
10511098
assistant,
10521099
}
10531100

1101+
/**
1102+
* Optional annotations for the client.
1103+
* The client can use annotations to inform how objects are used or displayed.
1104+
*/
1105+
@Serializable
1106+
public data class Annotations(
1107+
/**
1108+
* Describes who the intended customer of this object or data is.
1109+
*/
1110+
val audience: List<Role>?,
1111+
/**
1112+
* The moment the resource was last modified.
1113+
*/
1114+
@OptIn(ExperimentalTime::class)
1115+
val lastModified: Instant?,
1116+
/**
1117+
* Describes how important this data is for operating the server.
1118+
*
1119+
* A value of 1.0 means "most important", and indicates that the data is effectively required,
1120+
* while 0.0 means "less important", and indicates that the data is entirely optional.
1121+
*/
1122+
val priority: Double?,
1123+
) {
1124+
init {
1125+
require(priority == null || priority in 0.0..1.0) { "Priority must be between 0.0 and 1.0" }
1126+
}
1127+
}
1128+
10541129
/**
10551130
* Describes a message returned as part of a prompt.
10561131
*/

kotlin-sdk-core/src/commonTest/kotlin/io/modelcontextprotocol/kotlin/sdk/TypesTest.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import kotlin.test.assertEquals
66
import kotlin.test.assertIs
77
import kotlin.test.assertNotEquals
88
import kotlin.test.assertTrue
9+
import kotlin.time.ExperimentalTime
10+
import kotlin.time.Instant
911

1012
class TypesTest {
1113

@@ -236,6 +238,23 @@ class TypesTest {
236238
assertEquals("text/x-rust", textResource.mimeType)
237239
}
238240

241+
@OptIn(ExperimentalTime::class)
242+
@Test
243+
fun `should serialize and deserialize annotations correctly`() {
244+
val annotations = Annotations(
245+
audience = listOf(Role.assistant),
246+
lastModified = Instant.parse("2025-06-18T00:00:00Z"),
247+
priority = 0.5,
248+
)
249+
250+
val json = McpJson.encodeToString(annotations)
251+
val decoded = McpJson.decodeFromString<Annotations>(json)
252+
253+
assertEquals(listOf(Role.assistant), decoded.audience)
254+
assertEquals(Instant.parse("2025-06-18T00:00:00Z"), decoded.lastModified)
255+
assertEquals(0.5, decoded.priority)
256+
}
257+
239258
@Test
240259
fun `should serialize and deserialize prompt message correctly`() {
241260
val imageContent = ImageContent(

0 commit comments

Comments
 (0)