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..846f3c6e445 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)) { + // Add system prompt for user prompts and workspace rules + const contextType = this.telemetryHelper.getContextType(prompt) + 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: 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..eb99b8c5dca 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts @@ -42,7 +42,8 @@ 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' +import { isInDirectory } from '../../../shared/filesystemUtilities' export function logSendTelemetryEventFailure(error: any) { let requestId: string | undefined @@ -148,13 +149,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 (isInDirectory(path.join('.amazonq', 'rules'), prompt.relativePath)) { + return 'rule' + } else if (isInDirectory(getUserPromptsDirectory(), prompt.filePath)) { + return 'prompt' + } } + return 'file' } public getContextLengths(prompts: AdditionalContextPrompt[]): AdditionalContextLengths {