refs #739: unify Smilegate game target planning
This commit is contained in:
@@ -98,7 +98,12 @@ class McpSseServiceTest {
|
||||
var fewShot = tools.get(4);
|
||||
assertThat(fewShot.path("name").asText())
|
||||
.isEqualTo("oracle.select_ai.test_fewshot_nl2sql");
|
||||
assertThat(fewShot.path("description").asText()).contains("Few-shot");
|
||||
assertThat(fewShot.path("description").asText())
|
||||
.contains("Few-shot")
|
||||
.contains("NONE, SINGLE, MULTI, ALL");
|
||||
assertThat(fewShot.path("inputSchema").path("properties")
|
||||
.path("queryPlan").path("description").asText())
|
||||
.contains("NONE, SINGLE, MULTI, ALL");
|
||||
|
||||
var gameScope = tools.get(5);
|
||||
assertThat(gameScope.path("name").asText())
|
||||
@@ -110,6 +115,10 @@ class McpSseServiceTest {
|
||||
.isEqualTo("oracle.select_ai.game_catalog_resolve");
|
||||
assertThat(tools.get(7).path("name").asText())
|
||||
.isEqualTo("oracle.select_ai.game_query_plan");
|
||||
assertThat(tools.get(7).path("description").asText())
|
||||
.contains("항상 먼저 호출")
|
||||
.contains("NONE, SINGLE, MULTI, ALL")
|
||||
.contains("smilegate_fewshot_nl2sql");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -161,10 +170,22 @@ class McpSseServiceTest {
|
||||
ObjectNode request = request(7, "tools/call");
|
||||
ObjectNode params = (ObjectNode) request.putObject("params");
|
||||
params.put("name", "oracle.select_ai.test_fewshot_nl2sql");
|
||||
params.putObject("arguments").put("prompt", "카제나 AU를 조회해 줘");
|
||||
ObjectNode arguments = params.putObject("arguments");
|
||||
arguments.put("prompt", "전체 매출을 조회해 줘");
|
||||
ObjectNode plan = arguments.putObject("queryPlan");
|
||||
plan.put("targetType", "NONE");
|
||||
plan.put("status", "NO_TARGET");
|
||||
plan.putArray("targets").addObject()
|
||||
.put("status", "NONE")
|
||||
.putNull("gameKey")
|
||||
.putNull("gamePrefix")
|
||||
.putNull("userMasterObjectName");
|
||||
|
||||
ObjectNode response = service.handle("default", request, "user-bearer");
|
||||
|
||||
CapturingSelectAiService agentService = (CapturingSelectAiService) selectAiService;
|
||||
assertThat(agentService.prompt).isEqualTo("전체 매출을 조회해 줘");
|
||||
assertThat(agentService.queryPlan.path("targetType").asText()).isEqualTo("NONE");
|
||||
assertThat(response.path("result").path("isError").asBoolean()).isFalse();
|
||||
String payload = response.path("result").path("content").get(0).path("text").asText();
|
||||
assertThat(payload)
|
||||
@@ -262,7 +283,9 @@ class McpSseServiceTest {
|
||||
.contains("\"status\" : \"PARTIAL\"")
|
||||
.contains("\"gameKey\" : \"SUPPORTED_GAME\"")
|
||||
.contains("\"mention\" : \"Unknown game\"")
|
||||
.contains("\"reasonCode\" : \"LLM_NO_CANDIDATE_MATCH\"");
|
||||
.contains("\"reasonCode\" : \"LLM_NO_CANDIDATE_MATCH\"")
|
||||
.contains("\"targetType\" : \"MULTI\"")
|
||||
.contains("\"nextAction\" : \"CALL_FEWSHOT\"");
|
||||
}
|
||||
|
||||
private ObjectNode request(int id, String method) {
|
||||
@@ -277,6 +300,7 @@ class McpSseServiceTest {
|
||||
|
||||
private String bearerToken;
|
||||
private String prompt;
|
||||
private JsonNode queryPlan;
|
||||
private boolean showpromptCalled;
|
||||
|
||||
private CapturingSelectAiService() {
|
||||
@@ -302,6 +326,13 @@ class McpSseServiceTest {
|
||||
return generateAndExecute(bearerToken, prompt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonNode generateAndExecute(
|
||||
String bearerToken, String prompt, String scopeGameKey, JsonNode priorToolContext) {
|
||||
this.queryPlan = priorToolContext;
|
||||
return generateAndExecute(bearerToken, prompt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonNode generatePrompt(String bearerToken, String prompt) {
|
||||
this.bearerToken = bearerToken;
|
||||
@@ -372,8 +403,23 @@ class McpSseServiceTest {
|
||||
@Override
|
||||
public ObjectNode queryPlan(String token, String question, int topK) {
|
||||
ObjectNode plan = new ObjectMapper().createObjectNode();
|
||||
plan.put("scopeType", "MULTI_GAME");
|
||||
plan.put("targetType", "MULTI");
|
||||
plan.put("scopeType", "MULTI");
|
||||
plan.put("status", "PARTIAL");
|
||||
plan.putArray("targets")
|
||||
.addObject()
|
||||
.put("mention", "Supported game")
|
||||
.put("status", "MATCHED")
|
||||
.put("gameKey", "SUPPORTED_GAME")
|
||||
.put("gamePrefix", "SUPPORTED")
|
||||
.put("userMasterObjectName", "SUPPORTED_COMN_USER_MST");
|
||||
plan.withArray("targets")
|
||||
.addObject()
|
||||
.put("mention", "Unknown game")
|
||||
.put("status", "UNMATCHED")
|
||||
.putNull("gameKey")
|
||||
.putNull("gamePrefix")
|
||||
.putNull("userMasterObjectName");
|
||||
plan.putArray("matchedGames")
|
||||
.addObject()
|
||||
.put("gameKey", "SUPPORTED_GAME");
|
||||
@@ -385,8 +431,8 @@ class McpSseServiceTest {
|
||||
.addObject()
|
||||
.put("mention", "Unknown game")
|
||||
.put("reasonCode", "LLM_NO_CANDIDATE_MATCH");
|
||||
plan.put("nextAction", "CALL_FEWSHOT_PER_GAME");
|
||||
plan.put("executionMode", "FAN_OUT");
|
||||
plan.put("nextAction", "CALL_FEWSHOT");
|
||||
plan.put("executionMode", "COMBINED");
|
||||
return plan;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user