Skip to content

Commit 87add0a

Browse files
authored
fix(q): Handle monthly conversation limit error for QFeature development (#4373)
1 parent 96f33dc commit 87add0a

File tree

6 files changed

+27
-0
lines changed

6 files changed

+27
-0
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 Feature Development: Update error message for monthly conversation limit reach"
4+
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ class PlanIterationLimitError(override val message: String, override val cause:
1313

1414
class CodeIterationLimitError(override val message: String, override val cause: Throwable?) : RuntimeException()
1515

16+
class MonthlyConversationLimitError(override val message: String, override val cause: Throwable?) : RuntimeException()
17+
1618
internal fun codeGenerationFailedError(): Nothing =
1719
throw FeatureDevException(message("amazonqFeatureDev.code_generation.failed_generation"))
1820

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.ContentLengthE
3333
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.DEFAULT_RETRY_LIMIT
3434
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.FEATURE_NAME
3535
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.InboundAppMessagesHandler
36+
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.MonthlyConversationLimitError
3637
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.PlanIterationLimitError
3738
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.createUserFacingErrorMessage
3839
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.FeatureDevMessageType
@@ -49,6 +50,7 @@ import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendA
4950
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendAuthenticationInProgressMessage
5051
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendChatInputEnabledMessage
5152
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendError
53+
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendMonthlyLimitError
5254
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendSystemPrompt
5355
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendUpdatePlaceholder
5456
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.updateFileComponent
@@ -418,6 +420,9 @@ class FeatureDevController(
418420
)
419421
),
420422
)
423+
} else if (err is MonthlyConversationLimitError) {
424+
messenger.sendMonthlyLimitError(tabId = tabId)
425+
messenger.sendChatInputEnabledMessage(tabId, enabled = false)
421426
} else if (err is PlanIterationLimitError) {
422427
messenger.sendError(tabId = tabId, errMessage = err.message, retries = retriesRemaining(session))
423428
messenger.sendSystemPrompt(

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessagePublisherExtensions.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,15 @@ suspend fun MessagePublisher.sendError(tabId: String, errMessage: String, retrie
169169
)
170170
}
171171

172+
suspend fun MessagePublisher.sendMonthlyLimitError(tabId: String) {
173+
this.sendAnswer(
174+
tabId = tabId,
175+
messageType = FeatureDevMessageType.Answer,
176+
message = message("amazonqFeatureDev.exception.monthly_limit_error")
177+
)
178+
this.sendUpdatePlaceholder(tabId = tabId, newPlaceholder = message("amazonqFeatureDev.placeholder.after_monthly_limit"))
179+
}
180+
172181
suspend fun MessagePublisher.initialExamples(tabId: String) {
173182
this.sendAnswer(
174183
tabId = tabId,

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/util/FeatureDevClientUtil.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import software.aws.toolkits.core.utils.warn
1919
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.CodeIterationLimitError
2020
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.ContentLengthError
2121
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.FEATURE_NAME
22+
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.MonthlyConversationLimitError
2223
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.PlanIterationLimitError
2324
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.apiError
2425
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.clients.FeatureDevClient
@@ -50,6 +51,10 @@ fun createConversation(proxyClient: FeatureDevClient): String {
5051
if (e is CodeWhispererRuntimeException) {
5152
errMssg = e.awsErrorDetails().errorMessage()
5253
logger.warn(e) { "Start conversation failed for request: ${e.requestId()}" }
54+
55+
if (e is software.amazon.awssdk.services.codewhispererruntime.model.ServiceQuotaExceededException) {
56+
throw MonthlyConversationLimitError(errMssg, e.cause)
57+
}
5358
}
5459
apiError(errMssg, e.cause)
5560
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ amazonqFeatureDev.exception.conversation_not_found=Conversation id must exist be
6161
amazonqFeatureDev.exception.export_parsing_error=Downloaded code results could not be parsed
6262
amazonqFeatureDev.exception.insert_code_failed=Failed to insert code changes
6363
amazonqFeatureDev.exception.message_not_found=Message was not found
64+
amazonqFeatureDev.exception.monthly_limit_error=Sorry, you have reached the monthly limit for feature development. You can try again next month.
6465
amazonqFeatureDev.exception.open_diff_failed=Failed to open diff
6566
amazonqFeatureDev.exception.request_failed=Request failed
6667
amazonqFeatureDev.exception.retry_request_failed=Retry request failed
@@ -80,6 +81,7 @@ amazonqFeatureDev.follow_up.send_feedback=Send feedback
8081
amazonqFeatureDev.no_retries.error_text=Sorry, we're unable to provide a response at this time. Please try again later or share feedback with our team to help us troubleshoot.
8182
amazonqFeatureDev.placeholder.additional_improvements=Provide input on additional improvements
8283
amazonqFeatureDev.placeholder.after_code_generation=Select an option above to proceed
84+
amazonqFeatureDev.placeholder.after_monthly_limit=Chat input is disabled
8385
amazonqFeatureDev.placeholder.closed_session=Your session is now closed
8486
amazonqFeatureDev.placeholder.generating_approach=Generating plan...
8587
amazonqFeatureDev.placeholder.generating_code=Generating code...

0 commit comments

Comments
 (0)