fix: support freeform stopReason in sampling (#327)

- Add string values and JsonCreator method to StopReason enum
- Map unknown stop reason values to UNKNOWN constant for forward compatibility
- Add test coverage for unknown stop reason deserialization

Spec: f5ccad944f/schema/2024-11-05/schema.ts (L807)

Resolves #328
This commit is contained in:
Luca Chang 2025-06-19 14:02:27 -07:00 • committed by Christian Tzolov
commit aff24fdf2f

View file

@ -883,6 +883,23 @@ public class McpSchemaTests {
{"role":"assistant","content":{"type":"text","text":"Assistant response"},"model":"gpt-4","stopReason":"endTurn"}"""));
}
@Test
void testCreateMessageResultUnknownStopReason() throws Exception {
String input = """
{"role":"assistant","content":{"type":"text","text":"Assistant response"},"model":"gpt-4","stopReason":"arbitrary value"}""";
McpSchema.CreateMessageResult value = mapper.readValue(input, McpSchema.CreateMessageResult.class);
McpSchema.TextContent expectedContent = new McpSchema.TextContent("Assistant response");
McpSchema.CreateMessageResult expected = McpSchema.CreateMessageResult.builder()
.role(McpSchema.Role.ASSISTANT)
.content(expectedContent)
.model("gpt-4")
.stopReason(McpSchema.CreateMessageResult.StopReason.UNKNOWN)
.build();
assertThat(value).isEqualTo(expected);
}
// Elicitation Tests
@Test