Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type" : "bugfix",
"description" : "Amazon Q /doc: Prompt users to start a new documentation task if current task failed"
}
Original file line number Diff line number Diff line change
Expand Up @@ -407,10 +407,9 @@

else -> {
logger.error { "$FEATURE_NAME: OpenDiff event is received for a conversation that has ${session.sessionState.phase} phase" }
messenger.sendError(
messenger.sendErrorToUser(
tabId = message.tabId,
errMessage = message("amazonqFeatureDev.exception.open_diff_failed"),
retries = 0,
conversationId = session.conversationIdUnsafe
)
}
Expand Down Expand Up @@ -509,10 +508,9 @@
)
} catch (err: Exception) {
val message = createUserFacingErrorMessage("Failed to insert code changes: ${err.message}")
messenger.sendError(
messenger.sendErrorToUser(
tabId = tabId,
errMessage = message ?: message("amazonqFeatureDev.exception.insert_code_failed"),
retries = retriesRemaining(session),
conversationId = session?.conversationIdUnsafe
)
}
Expand Down Expand Up @@ -590,10 +588,9 @@

when (err) {
is RepoSizeError -> {
messenger.sendError(
messenger.sendErrorToUser(
tabId = tabId,
errMessage = err.message,
retries = retriesRemaining(session),
conversationId = session?.conversationIdUnsafe
)
messenger.sendSystemPrompt(
Expand All @@ -609,10 +606,9 @@
}

is ZipFileError -> {
messenger.sendError(
messenger.sendErrorToUser(
tabId = tabId,
errMessage = err.message,
retries = 0,
conversationId = session?.conversationIdUnsafe
)
}
Expand Down Expand Up @@ -704,10 +700,9 @@
else -> message("amazonqFeatureDev.error_text")
}

messenger.sendError(
messenger.sendErrorToUser(
tabId = tabId,
errMessage = defaultMessage,
retries = retriesRemaining(session),
conversationId = session?.conversationIdUnsafe
)
}
Expand Down Expand Up @@ -805,9 +800,12 @@
) {
return
}

if (filePaths.isEmpty() && deletedFiles.isEmpty()) {
handleEmptyFiles(followUpMessage, session)
messenger.sendErrorToUser(
followUpMessage.tabId,
message("amazonqDoc.error.generating"),
conversationId = session.conversationId
)
return
}

Expand Down Expand Up @@ -862,37 +860,6 @@
}
}

private suspend fun handleEmptyFiles(
message: IncomingDocMessage.FollowupClicked,
session: DocSession,
) {
messenger.sendAnswer(
message = message("amazonqDoc.error.generating"),
messageType = DocMessageType.Answer,
tabId = message.tabId,
canBeVoted = true
)

messenger.sendAnswer(
messageType = DocMessageType.SystemPrompt,
tabId = message.tabId,
followUp = if (retriesRemaining(session) > 0) {
listOf(
FollowUp(
pillText = message("amazonqFeatureDev.follow_up.retry"),
type = FollowUpTypes.RETRY,
status = FollowUpStatusType.Warning
)
)
} else {
emptyList()
}
)

// Lock the chat input until they explicitly click retry
messenger.sendChatInputEnabledMessage(tabId = message.tabId, enabled = false)
}

private suspend fun retryRequests(tabId: String) {
var session: DocSession? = null
docGenerationTask = DocGenerationTask()
Expand Down Expand Up @@ -1028,7 +995,7 @@

private fun getSessionInfo(tabId: String) = chatSessionStorage.getSession(tabId, context.project)

fun retriesRemaining(session: DocSession?): Int = session?.retries ?: DEFAULT_RETRY_LIMIT

Check notice on line 998 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocController.kt

View workflow job for this annotation

GitHub Actions / qodana

Class member can have 'private' visibility

Function 'retriesRemaining' could be private

companion object {
private val logger = getLogger<DocController>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,11 @@ package software.aws.toolkits.jetbrains.services.amazonqDoc.controller
import com.intellij.notification.NotificationAction
import software.aws.toolkits.jetbrains.services.amazonqDoc.inProgress
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.DocMessageType
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.FollowUp
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.FollowUpStatusType
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.FollowUpTypes
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendAnswer
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendAsyncEventProgress
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendChatInputEnabledMessage
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendCodeResult
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendErrorToUser
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendSystemPrompt
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendUpdatePlaceholder
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendUpdatePromptProgress
Expand Down Expand Up @@ -73,26 +71,12 @@ suspend fun DocController.onCodeGeneration(session: DocSession, message: String,

// Atm this is the only possible path as codegen is mocked to return empty.
if (filePaths.size or deletedFiles.size == 0) {
messenger.sendAnswer(
tabId = tabId,
messageType = DocMessageType.Answer,
message = message("amazonqFeatureDev.code_generation.no_file_changes")
)
messenger.sendSystemPrompt(
tabId = tabId,
followUp = if (retriesRemaining(session) > 0) {
listOf(
FollowUp(
pillText = message("amazonqFeatureDev.follow_up.retry"),
type = FollowUpTypes.RETRY,
status = FollowUpStatusType.Warning
)
)
} else {
emptyList()
}
messenger.sendErrorToUser(
tabId,
message("amazonqDoc.error.generating"),
conversationId = session.conversationId
)
messenger.sendChatInputEnabledMessage(tabId = tabId, enabled = false) // Lock chat input until retry is clicked.

return
}

Expand Down
Loading