diff --git a/src/main/java/com/ioa/conversation/ConversationFSM.java b/src/main/java/com/ioa/conversation/ConversationFSM.java index b67853e..2048686 100644 --- a/src/main/java/com/ioa/conversation/ConversationFSM.java +++ b/src/main/java/com/ioa/conversation/ConversationFSM.java @@ -66,15 +66,18 @@ public class ConversationFSM { } else { String stateTransitionTask = "Decide the next conversation state based on this message: " + message.getContent() + "\nCurrent state: " + currentState + - "\nParticipants: " + participants; + "\nParticipants: " + participants + + "\nPossible states: " + Arrays.toString(ConversationState.values()); String reasoning = model.generate(stateTransitionTask, null); String decisionPrompt = "Based on this reasoning:\n" + reasoning + - "\nProvide the next conversation state (DISCUSSION, TASK_ASSIGNMENT, EXECUTION, or CONCLUSION)."; + "\nProvide the next conversation state. Choose from: " + + Arrays.toString(ConversationState.values()) + + "\nResponse format: STATE: "; String response = model.generate(decisionPrompt, null); - ConversationState newState = ConversationState.valueOf(response.trim()); + ConversationState newState = parseStateFromResponse(response); transitionTo(newState); // Broadcast the message to all participants @@ -85,10 +88,24 @@ public class ConversationFSM { } webSocketService.sendUpdate("conversation_message", message); - } } + private ConversationState parseStateFromResponse(String response) { + String[] parts = response.split(":"); + if (parts.length > 1) { + String stateName = parts[1].trim().toUpperCase(); + try { + return ConversationState.valueOf(stateName); + } catch (IllegalArgumentException e) { + System.out.println("Invalid state name: " + stateName + ". Defaulting to DISCUSSION."); + return ConversationState.DISCUSSION; + } + } + System.out.println("Could not parse state from response: " + response + ". Defaulting to DISCUSSION."); + return ConversationState.DISCUSSION; + } + private void handleVote(String agentId) { votes.put(agentId, true); checkVotes(); diff --git a/src/main/java/com/ioa/conversation/ConversationState.java b/src/main/java/com/ioa/conversation/ConversationState.java index b8921b4..470d24d 100644 --- a/src/main/java/com/ioa/conversation/ConversationState.java +++ b/src/main/java/com/ioa/conversation/ConversationState.java @@ -1,5 +1,9 @@ package com.ioa.conversation; public enum ConversationState { - DISCUSSION, TASK_ASSIGNMENT, EXECUTION, CONCLUSION + DISCUSSION, + TASK_GATHERING_INFO, + TASK_ASSIGNMENT, + EXECUTION, + CONCLUSION } \ No newline at end of file diff --git a/target/classes/com/ioa/conversation/ConversationFSM$ConversationStateUpdate.class b/target/classes/com/ioa/conversation/ConversationFSM$ConversationStateUpdate.class index 49bea4b..7d069d0 100644 Binary files a/target/classes/com/ioa/conversation/ConversationFSM$ConversationStateUpdate.class and b/target/classes/com/ioa/conversation/ConversationFSM$ConversationStateUpdate.class differ diff --git a/target/classes/com/ioa/conversation/ConversationFSM.class b/target/classes/com/ioa/conversation/ConversationFSM.class index 186c4a5..7850dc0 100644 Binary files a/target/classes/com/ioa/conversation/ConversationFSM.class and b/target/classes/com/ioa/conversation/ConversationFSM.class differ diff --git a/target/classes/com/ioa/conversation/ConversationState.class b/target/classes/com/ioa/conversation/ConversationState.class index 588ae27..ce8022f 100644 Binary files a/target/classes/com/ioa/conversation/ConversationState.class and b/target/classes/com/ioa/conversation/ConversationState.class differ