Skip to content

Commit 52d7701

Browse files
authored
fix(amazonq): rely on server-side data to communicate number of code … (#5263)
* fix(amazonq): rely on server-side data to communicate number of code generations remaining * fix(amazonq): rely on server-side data to communicate number of code generations remaining * fix(amazonq): rely on server-side data to communicate number of code generations remaining * fix(amazonq): rely on server-side data to communicate number of code generations remaining * fix(amazonq): rely on server-side data to communicate number of code generations remaining
1 parent 72577ef commit 52d7701

File tree

6 files changed

+55
-27
lines changed

6 files changed

+55
-27
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Amazon Q /dev: Remove hard-coded limits and instead rely server-side data to communicate number of code generations remaining"
4+
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevControllerExtensions.kt

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.Delete
2828
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.NewFileZipInfo
2929
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.PrepareCodeGenerationState
3030
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.Session
31-
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.SessionState
3231
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.CancellationTokenSource
3332
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.InsertAction
3433
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.getFollowUpOptions
@@ -64,7 +63,7 @@ suspend fun FeatureDevController.onCodeGeneration(
6463
var totalIterations: Int? = state.codeGenerationTotalIterationCount
6564

6665
if (state.token?.token?.isCancellationRequested() == true) {
67-
disposeToken(state, messenger, tabId, state.currentIteration?.let { CODE_GENERATION_RETRY_LIMIT.minus(it) }, CODE_GENERATION_RETRY_LIMIT)
66+
disposeToken(messenger, tabId, state.codeGenerationRemainingIterationCount, state.codeGenerationTotalIterationCount)
6867
return
6968
}
7069

@@ -96,7 +95,7 @@ suspend fun FeatureDevController.onCodeGeneration(
9695
}
9796

9897
if (state.token?.token?.isCancellationRequested() == true) {
99-
disposeToken(state, messenger, tabId, state.currentIteration?.let { CODE_GENERATION_RETRY_LIMIT.minus(it) }, CODE_GENERATION_RETRY_LIMIT)
98+
disposeToken(messenger, tabId, state.codeGenerationRemainingIterationCount, state.codeGenerationTotalIterationCount)
10099
return
101100
}
102101

@@ -133,14 +132,20 @@ suspend fun FeatureDevController.onCodeGeneration(
133132
tabId = tabId,
134133
messageType = FeatureDevMessageType.Answer,
135134
message =
136-
if (remainingIterations == 0) {
137-
message("amazonqFeatureDev.code_generation.iteration_zero")
138-
} else {
135+
if (remainingIterations > 2) {
136+
message("amazonqFeatureDev.code_generation.iteration_counts_ask_to_add_code_or_feedback")
137+
} else if (remainingIterations > 0) {
139138
message(
140139
"amazonqFeatureDev.code_generation.iteration_counts",
141140
remainingIterations,
142141
totalIterations,
143142
)
143+
} else {
144+
message(
145+
"amazonqFeatureDev.code_generation.iteration_counts_ask_to_add_code",
146+
remainingIterations,
147+
totalIterations,
148+
)
144149
},
145150
)
146151
}
@@ -196,7 +201,6 @@ suspend fun FeatureDevController.onCodeGeneration(
196201
}
197202

198203
private suspend fun disposeToken(
199-
state: SessionState,
200204
messenger: MessagePublisher,
201205
tabId: String,
202206
remainingIterations: Int?,
@@ -234,16 +238,25 @@ private suspend fun disposeToken(
234238
return
235239
}
236240

237-
messenger.sendAnswer(
238-
tabId = tabId,
239-
messageType = FeatureDevMessageType.Answer,
240-
message =
241-
message(
242-
"amazonqFeatureDev.code_generation.stopped_code_generation",
243-
remainingIterations ?: state.currentIteration?.let { CODE_GENERATION_RETRY_LIMIT - it } as Any,
244-
totalIterations ?: CODE_GENERATION_RETRY_LIMIT,
245-
),
246-
)
241+
if (remainingIterations !== null && totalIterations !== null && remainingIterations <= 2) {
242+
messenger.sendAnswer(
243+
tabId = tabId,
244+
messageType = FeatureDevMessageType.Answer,
245+
message =
246+
message(
247+
"amazonqFeatureDev.code_generation.stopped_code_generation",
248+
remainingIterations,
249+
totalIterations,
250+
),
251+
)
252+
} else {
253+
messenger.sendAnswer(
254+
tabId = tabId,
255+
messageType = FeatureDevMessageType.Answer,
256+
message =
257+
message("amazonqFeatureDev.code_generation.stopped_code_generation_no_iteration_count_display"),
258+
)
259+
}
247260

248261
messenger.sendChatInputEnabledMessage(tabId = tabId, enabled = true)
249262

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/CodeGenerationState.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ class CodeGenerationState(
8484
numberOfFilesGenerated = codeGenerationResult.newFiles.size
8585
codeGenerationRemainingIterationCount = codeGenerationResult.codeGenerationRemainingIterationCount
8686
codeGenerationTotalIterationCount = codeGenerationResult.codeGenerationTotalIterationCount
87+
currentIteration =
88+
if (codeGenerationRemainingIterationCount != null && codeGenerationTotalIterationCount != null) {
89+
codeGenerationTotalIterationCount?.let { total -> codeGenerationRemainingIterationCount?.let { remaining -> total - remaining } }
90+
} else {
91+
currentIteration?.plus(1)
92+
}
8793

8894
runCatching {
8995
var insertedLines = 0
@@ -128,7 +134,7 @@ class CodeGenerationState(
128134
filePaths = codeGenerationResult.newFiles,
129135
deletedFiles = codeGenerationResult.deletedFiles,
130136
references = codeGenerationResult.references,
131-
currentIteration = currentIteration?.plus(1),
137+
currentIteration = currentIteration,
132138
uploadId = uploadId,
133139
messenger = messenger,
134140
codeGenerationRemainingIterationCount = codeGenerationRemainingIterationCount,
@@ -182,17 +188,22 @@ private suspend fun CodeGenerationState.generateCode(
182188
): CodeGenerationResult {
183189
val pollCount = 360
184190
val requestDelay = 5000L
191+
var codeGenerationRemainingIterationCount: Int? = null
192+
var codeGenerationTotalIterationCount: Int? = null
185193

186194
repeat(pollCount) {
187195
if (token?.token?.isCancellationRequested() == true) {
188-
return CodeGenerationResult(emptyList(), emptyList(), emptyList())
196+
return CodeGenerationResult(emptyList(), emptyList(), emptyList(), codeGenerationRemainingIterationCount, codeGenerationTotalIterationCount)
189197
}
190198
val codeGenerationResultState =
191199
config.featureDevService.getTaskAssistCodeGeneration(
192200
conversationId = config.conversationId,
193201
codeGenerationId = codeGenerationId,
194202
)
195203

204+
codeGenerationRemainingIterationCount = codeGenerationResultState.codeGenerationRemainingIterationCount()
205+
codeGenerationTotalIterationCount = codeGenerationResultState.codeGenerationTotalIterationCount()
206+
196207
when (codeGenerationResultState.codeGenerationStatus().status()) {
197208
CodeGenerationWorkflowStatus.COMPLETE -> {
198209
val codeGenerationStreamResult =
@@ -207,8 +218,8 @@ private suspend fun CodeGenerationState.generateCode(
207218
newFiles = newFileInfo,
208219
deletedFiles = deletedFileInfo,
209220
references = codeGenerationStreamResult.references,
210-
codeGenerationRemainingIterationCount = codeGenerationResultState.codeGenerationRemainingIterationCount(),
211-
codeGenerationTotalIterationCount = codeGenerationResultState.codeGenerationTotalIterationCount(),
221+
codeGenerationRemainingIterationCount = codeGenerationRemainingIterationCount,
222+
codeGenerationTotalIterationCount = codeGenerationTotalIterationCount,
212223
)
213224
}
214225
CodeGenerationWorkflowStatus.IN_PROGRESS -> {
@@ -252,7 +263,7 @@ private suspend fun CodeGenerationState.generateCode(
252263
}
253264
}
254265

255-
return CodeGenerationResult(emptyList(), emptyList(), emptyList())
266+
return CodeGenerationResult(emptyList(), emptyList(), emptyList(), codeGenerationRemainingIterationCount, codeGenerationTotalIterationCount)
256267
}
257268

258269
fun registerNewFiles(newFileContents: Map<String, String>): List<NewFileZipInfo> =

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/ConversationNotStartedState.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ class ConversationNotStartedState(
99
override var approach: String,
1010
override val tabID: String,
1111
override var token: CancellationTokenSource?,
12-
override var codeGenerationRemainingIterationCount: Int?,
13-
override var codeGenerationTotalIterationCount: Int?,
12+
override var codeGenerationRemainingIterationCount: Int? = null,
13+
override var codeGenerationTotalIterationCount: Int? = null,
1414
override var currentIteration: Int?,
1515
override var diffMetricsProcessed: DiffMetricsProcessed,
1616
) : SessionState {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/Session.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ class Session(val tabID: String, val project: Project) {
5555
approach = "",
5656
tabID = tabID,
5757
token = null,
58-
codeGenerationRemainingIterationCount = 0,
59-
codeGenerationTotalIterationCount = CODE_GENERATION_RETRY_LIMIT,
6058
currentIteration = 0,
6159
diffMetricsProcessed = DiffMetricsProcessed(HashSet(), HashSet())
6260
)

plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,17 @@ amazonqFeatureDev.code_generation.error_message=I'm sorry, I ran into an issue w
8585
amazonqFeatureDev.code_generation.failed_generation=Code generation failed
8686
amazonqFeatureDev.code_generation.generating_code=Generating code ...
8787
amazonqFeatureDev.code_generation.iteration_counts=Would you like me to add this code to your project, or provide feedback for new code? You have {0} out of {1} code generations left.
88+
amazonqFeatureDev.code_generation.iteration_counts_ask_to_add_code=Would you like me to add this code to your project?
89+
amazonqFeatureDev.code_generation.iteration_counts_ask_to_add_code_or_feedback=Would you like me to add this code to your project, or provide feedback for new code?
8890
amazonqFeatureDev.code_generation.iteration_limit.error_text=Sorry, you've reached the quota for number of iterations on code generation. You can insert this code in your files or discuss a new plan. For more information on quotas, see the [Amazon Q Developer documentation](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/software-dev.html#quotas).
89-
amazonqFeatureDev.code_generation.iteration_zero=Would you like me to add this code to your project?
9091
amazonqFeatureDev.code_generation.no_file_changes=Unable to generate any file changes
9192
amazonqFeatureDev.code_generation.no_retries.error_message=I'm sorry, I'm having trouble generating your code and can't continue at the moment. Please try again later, and share feedback to help me improve.
9293
amazonqFeatureDev.code_generation.notification_message=Your code suggestions from Amazon Q are ready to review
9394
amazonqFeatureDev.code_generation.notification_open_link=Open chat
9495
amazonqFeatureDev.code_generation.notification_title=Amazon Q Developer Agent for software development
9596
amazonqFeatureDev.code_generation.provide_code_feedback=How can I improve the code for your use case?
9697
amazonqFeatureDev.code_generation.stopped_code_generation=I stopped generating your code. If you want to continue working on this task, provide another description. You have {0} out of {1} code generations left.
98+
amazonqFeatureDev.code_generation.stopped_code_generation_no_iteration_count_display=I stopped generating your code. If you want to continue working on this task, provide another description.
9799
amazonqFeatureDev.code_generation.stopped_code_generation_no_iterations=I stopped generating your code. You don't have more iterations left, however, you can start a new session.
98100
amazonqFeatureDev.code_generation.stopping_code_generation=Stopping code generation...
99101
amazonqFeatureDev.code_generation.updated_code=Okay, I updated your code files. Would you like to work on another task?

0 commit comments

Comments
 (0)