From e0106b36207e12474b77a9d18e38e527d950ee2e Mon Sep 17 00:00:00 2001 From: Avi Alpert Date: Thu, 13 Mar 2025 09:21:24 -0400 Subject: [PATCH 1/2] fix(amazonq): improve system prompts for rules --- ... Fix-62081c53-09b4-46b0-80b0-6eb853ffabd6.json | 4 ++++ .../controllers/chat/controller.ts | 9 +++++++-- .../controllers/chat/telemetryHelper.ts | 15 ++++++++------- 3 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 packages/amazonq/.changes/next-release/Bug Fix-62081c53-09b4-46b0-80b0-6eb853ffabd6.json diff --git a/packages/amazonq/.changes/next-release/Bug Fix-62081c53-09b4-46b0-80b0-6eb853ffabd6.json b/packages/amazonq/.changes/next-release/Bug Fix-62081c53-09b4-46b0-80b0-6eb853ffabd6.json new file mode 100644 index 00000000000..e2e4205f6c6 --- /dev/null +++ b/packages/amazonq/.changes/next-release/Bug Fix-62081c53-09b4-46b0-80b0-6eb853ffabd6.json @@ -0,0 +1,4 @@ +{ + "type": "Bug Fix", + "description": "Amazon Q chat: Improve responses for saved prompts and workspace rules" +} diff --git a/packages/core/src/codewhispererChat/controllers/chat/controller.ts b/packages/core/src/codewhispererChat/controllers/chat/controller.ts index e1a41d69a23..9e5ee93522d 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/controller.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/controller.ts @@ -980,9 +980,15 @@ export class ChatController { if (Array.isArray(prompts) && prompts.length > 0) { triggerPayload.additionalContextLengths = this.telemetryHelper.getContextLengths(prompts) for (const prompt of prompts.slice(0, 20)) { + let description = prompt.description + // Add system prompt for user prompts and workspace rules + const contextType = this.telemetryHelper.getContextType(prompt) + if (contextType === 'rule' || contextType === 'prompt') { + description = `You must follow the instructions in ${prompt.relativePath}. Below are lines ${prompt.startLine}-${prompt.endLine} of this file:\n` + } const entry = { name: prompt.name.substring(0, aditionalContentNameLimit), - description: prompt.description.substring(0, aditionalContentNameLimit), + description: description.substring(0, aditionalContentNameLimit), innerContext: prompt.content.substring(0, additionalContentInnerContextLimit), } // make sure the relevantDocument + additionalContext @@ -994,7 +1000,6 @@ export class ChatController { break } - const contextType = this.telemetryHelper.getContextType(prompt) if (contextType === 'rule') { triggerPayload.truncatedAdditionalContextLengths.ruleContextLength += entry.innerContext.length } else if (contextType === 'prompt') { diff --git a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts index 8c63eb44972..2fabee47964 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts @@ -42,7 +42,7 @@ import { AuthUtil } from '../../../codewhisperer/util/authUtil' import { getSelectedCustomization } from '../../../codewhisperer/util/customizationUtil' import { undefinedIfEmpty } from '../../../shared/utilities/textUtilities' import { AdditionalContextPrompt } from '../../../amazonq/lsp/types' -import { getUserPromptsDirectory } from '../../constants' +import { getUserPromptsDirectory, promptFileExtension } from '../../constants' export function logSendTelemetryEventFailure(error: any) { let requestId: string | undefined @@ -148,13 +148,14 @@ export class CWCTelemetryHelper { } public getContextType(prompt: AdditionalContextPrompt): string { - if (prompt.relativePath.startsWith(path.join('.amazonq', 'rules'))) { - return 'rule' - } else if (prompt.filePath.startsWith(getUserPromptsDirectory())) { - return 'prompt' - } else { - return 'file' + if (prompt.filePath.endsWith(promptFileExtension)) { + if (prompt.relativePath.startsWith(path.join('.amazonq', 'rules'))) { + return 'rule' + } else if (prompt.filePath.startsWith(getUserPromptsDirectory())) { + return 'prompt' + } } + return 'file' } public getContextLengths(prompts: AdditionalContextPrompt[]): AdditionalContextLengths { From 5ef5cc75fbf781b18db57a41f3f2a23e98f94933 Mon Sep 17 00:00:00 2001 From: Avi Alpert Date: Tue, 18 Mar 2025 16:04:25 -0400 Subject: [PATCH 2/2] fix(amazonq): use isInDirectory utility --- .../src/codewhispererChat/controllers/chat/controller.ts | 8 ++++---- .../codewhispererChat/controllers/chat/telemetryHelper.ts | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/core/src/codewhispererChat/controllers/chat/controller.ts b/packages/core/src/codewhispererChat/controllers/chat/controller.ts index 9e5ee93522d..846f3c6e445 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/controller.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/controller.ts @@ -980,12 +980,12 @@ export class ChatController { if (Array.isArray(prompts) && prompts.length > 0) { triggerPayload.additionalContextLengths = this.telemetryHelper.getContextLengths(prompts) for (const prompt of prompts.slice(0, 20)) { - let description = prompt.description // Add system prompt for user prompts and workspace rules const contextType = this.telemetryHelper.getContextType(prompt) - if (contextType === 'rule' || contextType === 'prompt') { - description = `You must follow the instructions in ${prompt.relativePath}. Below are lines ${prompt.startLine}-${prompt.endLine} of this file:\n` - } + const description = + contextType === 'rule' || contextType === 'prompt' + ? `You must follow the instructions in ${prompt.relativePath}. Below are lines ${prompt.startLine}-${prompt.endLine} of this file:\n` + : prompt.description const entry = { name: prompt.name.substring(0, aditionalContentNameLimit), description: description.substring(0, aditionalContentNameLimit), diff --git a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts index 2fabee47964..eb99b8c5dca 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts @@ -43,6 +43,7 @@ import { getSelectedCustomization } from '../../../codewhisperer/util/customizat import { undefinedIfEmpty } from '../../../shared/utilities/textUtilities' import { AdditionalContextPrompt } from '../../../amazonq/lsp/types' import { getUserPromptsDirectory, promptFileExtension } from '../../constants' +import { isInDirectory } from '../../../shared/filesystemUtilities' export function logSendTelemetryEventFailure(error: any) { let requestId: string | undefined @@ -149,9 +150,9 @@ export class CWCTelemetryHelper { public getContextType(prompt: AdditionalContextPrompt): string { if (prompt.filePath.endsWith(promptFileExtension)) { - if (prompt.relativePath.startsWith(path.join('.amazonq', 'rules'))) { + if (isInDirectory(path.join('.amazonq', 'rules'), prompt.relativePath)) { return 'rule' - } else if (prompt.filePath.startsWith(getUserPromptsDirectory())) { + } else if (isInDirectory(getUserPromptsDirectory(), prompt.filePath)) { return 'prompt' } }