diff --git a/agentscope-core/src/main/java/io/agentscope/core/formatter/dashscope/DashScopeToolsHelper.java b/agentscope-core/src/main/java/io/agentscope/core/formatter/dashscope/DashScopeToolsHelper.java index 6aeb0d9ba..60d65c9f6 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/formatter/dashscope/DashScopeToolsHelper.java +++ b/agentscope-core/src/main/java/io/agentscope/core/formatter/dashscope/DashScopeToolsHelper.java @@ -97,6 +97,11 @@ public void applyOptions( params.setPresencePenalty(presencePenalty); } + var responseFormat = getOption(options, defaultOptions, GenerateOptions::getResponseFormat); + if (responseFormat != null) { + params.setResponseFormat(responseFormat); + } + // Apply parallel tool calls Boolean parallelToolCalls = getOption(options, defaultOptions, GenerateOptions::getParallelToolCalls); diff --git a/agentscope-core/src/test/java/io/agentscope/core/formatter/dashscope/DashScopeToolsHelperComprehensiveTest.java b/agentscope-core/src/test/java/io/agentscope/core/formatter/dashscope/DashScopeToolsHelperComprehensiveTest.java index f955824b6..c7eb553fc 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/formatter/dashscope/DashScopeToolsHelperComprehensiveTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/formatter/dashscope/DashScopeToolsHelperComprehensiveTest.java @@ -21,9 +21,11 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import io.agentscope.core.formatter.ResponseFormat; import io.agentscope.core.formatter.dashscope.dto.DashScopeParameters; import io.agentscope.core.formatter.dashscope.dto.DashScopeTool; import io.agentscope.core.formatter.dashscope.dto.DashScopeToolCall; +import io.agentscope.core.formatter.openai.dto.JsonSchema; import io.agentscope.core.message.ToolUseBlock; import io.agentscope.core.model.GenerateOptions; import io.agentscope.core.model.ToolChoice; @@ -112,6 +114,7 @@ void testApplyOptionsWithAllOptions() { .topP(0.9) .maxTokens(1024) .thinkingBudget(500) + .responseFormat(ResponseFormat.jsonObject()) .build(); helper.applyOptions(params, options, null); @@ -121,18 +124,32 @@ void testApplyOptionsWithAllOptions() { assertEquals(1024, params.getMaxTokens()); assertEquals(500, params.getThinkingBudget()); assertTrue(params.getEnableThinking()); + assertNotNull(params.getResponseFormat()); + assertEquals("json_object", params.getResponseFormat().getType()); + assertNull(params.getResponseFormat().getJsonSchema()); } @Test void testApplyOptionsWithDefaultOptions() { DashScopeParameters params = DashScopeParameters.builder().build(); GenerateOptions defaultOptions = - GenerateOptions.builder().temperature(0.7).maxTokens(512).build(); + GenerateOptions.builder() + .temperature(0.7) + .maxTokens(512) + .responseFormat( + ResponseFormat.jsonSchema( + JsonSchema.builder() + .name("DefaultResponse") + .schema(Map.of("type", "object")) + .build())) + .build(); helper.applyOptions(params, null, defaultOptions); assertEquals(0.7, params.getTemperature()); assertEquals(512, params.getMaxTokens()); + assertNotNull(params.getResponseFormat()); + assertEquals("json_schema", params.getResponseFormat().getType()); } @Test