Add subtask generation decision

Change-Id: If43efa882de08bc262fe6117af7307e97c4dfeda
diff --git a/server/llm/fake/fake.go b/server/llm/fake/fake.go
index 3735821..58185b3 100644
--- a/server/llm/fake/fake.go
+++ b/server/llm/fake/fake.go
@@ -186,6 +186,20 @@
   "estimated_total_hours": 102,
   "risk_assessment": "Main risks include scope creep, API integration complexity, and potential database performance issues. Mitigation strategies include regular stakeholder reviews, comprehensive API documentation, and early performance testing."
 }`,
+
+		`{
+  "needs_subtasks": true,
+  "reasoning": "This task appears to be complex and multi-faceted, requiring different specialized skills including backend development, frontend work, database management, and testing. Breaking it down into subtasks would allow for better parallel execution and specialized agent assignment.",
+  "complexity_score": 8,
+  "required_skills": ["backend_development", "frontend_development", "database_design", "api_development", "testing", "deployment"]
+}`,
+
+		`{
+  "needs_subtasks": false,
+  "reasoning": "This task is straightforward and can be completed by a single agent with existing capabilities. The scope is well-defined and doesn't require multiple specialized skills or extensive coordination.",
+  "complexity_score": 3,
+  "required_skills": ["basic_development"]
+}`,
 	}
 
 	return &FakeProvider{
@@ -199,22 +213,34 @@
 	// Simulate API delay
 	time.Sleep(500 * time.Millisecond)
 
-	// Check if this is a subtask analysis request
-	isSubtaskRequest := false
+	// Check the type of request to provide appropriate response
+	isSubtaskAnalysisRequest := false
+	isSubtaskDecisionRequest := false
 	for _, msg := range req.Messages {
-		if strings.Contains(msg.Content, "subtasks") || strings.Contains(msg.Content, "JSON") {
-			isSubtaskRequest = true
+		if strings.Contains(msg.Content, "break it down into subtasks") || strings.Contains(msg.Content, "subtask analysis") {
+			isSubtaskAnalysisRequest = true
+			break
+		} else if strings.Contains(msg.Content, "needs to be broken down") || strings.Contains(msg.Content, "evaluate whether") {
+			isSubtaskDecisionRequest = true
 			break
 		}
 	}
 
 	var response string
-	if isSubtaskRequest && len(f.responses) > 3 {
-		// Always use the JSON subtask response for subtask requests
-		response = f.responses[3] // The JSON response is at index 3
+	if isSubtaskAnalysisRequest && len(f.responses) > 3 {
+		// Use the detailed subtask analysis JSON response
+		response = f.responses[3] // The detailed JSON response is at index 3
+	} else if isSubtaskDecisionRequest && len(f.responses) > 4 {
+		// Use alternating decision responses
+		if f.index%2 == 0 {
+			response = f.responses[4] // "needs_subtasks": true
+		} else {
+			response = f.responses[5] // "needs_subtasks": false
+		}
+		f.index++
 	} else {
-		// Get the next response (cycle through responses)
-		response = f.responses[f.index%len(f.responses)]
+		// Get the next regular response (cycle through first 3)
+		response = f.responses[f.index%3] // Only cycle through first 3 responses
 		f.index++
 	}