Skip to content

Commit fc400ac

Browse files
committed
patch only inplicit timeout apply to timeout
1 parent 03c667c commit fc400ac

File tree

5 files changed

+18
-10
lines changed

5 files changed

+18
-10
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/ChatController.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import software.aws.toolkits.core.utils.getLogger
3636
import software.aws.toolkits.core.utils.info
3737
import software.aws.toolkits.core.utils.warn
3838
import software.aws.toolkits.jetbrains.core.coroutines.EDT
39+
import software.aws.toolkits.jetbrains.services.amazonq.CHAT_INPLICIT_PROJECT_CONTEXT_TIMEOUT
3940
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService
4041
import software.aws.toolkits.jetbrains.services.amazonq.apps.AmazonQAppInitContext
4142
import software.aws.toolkits.jetbrains.services.amazonq.auth.AuthController
@@ -137,15 +138,15 @@ class ChatController private constructor(
137138
shouldUseWorkspaceContext = true
138139
prompt = prompt.replace("@workspace", "")
139140
val projectContextController = ProjectContextController.getInstance(context.project)
140-
queryResult = projectContextController.query(prompt)
141+
queryResult = projectContextController.query(prompt, timeout = null)
141142
if (!projectContextController.getProjectContextIndexComplete()) shouldAddIndexInProgressMessage = true
142143
logger.info { "project context relevant document count: ${queryResult.size}" }
143144
} else {
144145
sendOpenSettingsMessage(message.tabId)
145146
}
146147
} else if (CodeWhispererSettings.getInstance().isProjectContextEnabled() && isDataCollectionGroup) {
147148
val projectContextController = ProjectContextController.getInstance(context.project)
148-
queryResult = projectContextController.query(prompt)
149+
queryResult = projectContextController.query(prompt, timeout = CHAT_INPLICIT_PROJECT_CONTEXT_TIMEOUT)
149150
}
150151

151152
handleChat(

plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/workspace/context/ProjectContextProviderTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ class ProjectContextProviderTest {
216216
@Test
217217
fun `query should send correct encrypted request to lsp`() = runTest {
218218
sut = ProjectContextProvider(project, encoderServer, this)
219-
val r = sut.query("foo")
219+
val r = sut.query("foo", null)
220220
advanceUntilIdle()
221221

222222
val request = QueryChatRequest("foo")
@@ -271,14 +271,14 @@ class ProjectContextProviderTest {
271271
)
272272

273273
assertThrows<Exception> {
274-
sut.query("foo")
274+
sut.query("foo", null)
275275
}
276276
}
277277

278278
@Test
279279
fun `query chat should return deserialized relevantDocument`() = runTest {
280280
sut = ProjectContextProvider(project, encoderServer, this)
281-
val r = sut.query("foo")
281+
val r = sut.query("foo", null)
282282
advanceUntilIdle()
283283
assertThat(r).hasSize(2)
284284
assertThat(r[0]).isEqualTo(
@@ -397,7 +397,7 @@ class ProjectContextProviderTest {
397397
)
398398

399399
withContext(getCoroutineBgContext()) {
400-
sut.query("foo")
400+
sut.query("foo", timeout = 500L)
401401
}
402402

403403
advanceUntilIdle()
@@ -418,7 +418,7 @@ class ProjectContextProviderTest {
418418
@Test
419419
fun `test query payload is encrypted`() = runTest {
420420
sut = ProjectContextProvider(project, encoderServer, this)
421-
sut.query("what does this project do")
421+
sut.query("what does this project do", null)
422422
advanceUntilIdle()
423423
verify(encoderServer, times(1)).encrypt(any())
424424
}

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/Constants.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonq
55

6+
import kotlin.time.Duration.Companion.minutes
7+
68
const val APPLICATION_ZIP = "application/zip"
79
const val SERVER_SIDE_ENCRYPTION = "x-amz-server-side-encryption"
810
const val AWS_KMS = "aws:kms"
@@ -39,3 +41,7 @@ const val CODE_TRANSFORM_PREREQUISITES =
3941
const val FEATURE_EVALUATION_PRODUCT_NAME = "CodeWhisperer"
4042

4143
const val SUPPLEMENTAL_CONTEXT_TIMEOUT = 100L
44+
45+
val CHAT_EXPLICIT_PROJECT_CONTEXT_TIMEOUT = 5.minutes.inWholeMilliseconds
46+
47+
val CHAT_INPLICIT_PROJECT_CONTEXT_TIMEOUT = 500L // 500ms

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextController.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ class ProjectContextController(private val project: Project, private val cs: Cor
4747

4848
fun getProjectContextIndexComplete() = projectContextProvider.isIndexComplete.get()
4949

50-
suspend fun query(prompt: String): List<RelevantDocument> {
50+
suspend fun query(prompt: String, timeout: Long?): List<RelevantDocument> {
5151
try {
52-
return projectContextProvider.query(prompt)
52+
return projectContextProvider.query(prompt, timeout)
5353
} catch (e: Exception) {
5454
logger.warn { "error while querying for project context $e.message" }
5555
return emptyList()

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import software.aws.toolkits.core.utils.debug
2525
import software.aws.toolkits.core.utils.getLogger
2626
import software.aws.toolkits.core.utils.info
2727
import software.aws.toolkits.core.utils.warn
28+
import software.aws.toolkits.jetbrains.services.amazonq.CHAT_EXPLICIT_PROJECT_CONTEXT_TIMEOUT
2829
import software.aws.toolkits.jetbrains.services.amazonq.FeatureDevSessionContext
2930
import software.aws.toolkits.jetbrains.services.amazonq.SUPPLEMENTAL_CONTEXT_TIMEOUT
3031
import software.aws.toolkits.jetbrains.services.cwc.controller.chat.telemetry.getStartUrl
@@ -160,7 +161,7 @@ class ProjectContextProvider(val project: Project, private val encoderServer: En
160161

161162
// TODO: rename queryChat
162163
// TODO: timeout window not decided
163-
suspend fun query(prompt: String): List<RelevantDocument> = withTimeout(500L) {
164+
suspend fun query(prompt: String, timeout: Long?): List<RelevantDocument> = withTimeout(timeout ?: CHAT_EXPLICIT_PROJECT_CONTEXT_TIMEOUT) {
164165
cs.async {
165166
val encrypted = encryptRequest(QueryChatRequest(prompt))
166167
val response = sendMsgToLsp(LspMessage.QueryChat, encrypted)

0 commit comments

Comments
 (0)