Skip to content

telemetry(chat): history character count in addMessage #7107

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: feature/agentic-chat
Choose a base branch
from
Draft
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
Expand Up @@ -48,6 +48,8 @@ import { AdditionalContextPrompt } from '../../../amazonq/lsp/types'
import { getUserPromptsDirectory, promptFileExtension } from '../../constants'
import { isInDirectory } from '../../../shared/filesystemUtilities'
import { CustomFormActionMessage } from '../../view/connector/connector'
import { Database } from '../../../shared/db/chatDb/chatDb'
import { Message } from '../../../shared/db/chatDb/util'

export function logSendTelemetryEventFailure(error: any) {
let requestId: string | undefined
Expand Down Expand Up @@ -217,6 +219,26 @@ export class CWCTelemetryHelper {
telemetry.feedback_result.emit({ result: feedbackResult })
}

public record_TODO(tabId: string, conversationId: string, message: Message) {
try {
telemetry.amazonq_addMessageHistory.run((span) => {
span.record({
result: 'Succeeded',
cwsprChatConversationId: conversationId,
cwsprChatConversationType: 'todo',
cwsprChatHistoryMessageCharacterCount: message.characterCount,
cwsprChatMessageId: message.messageId,
cwsprToolName: 'todo',
cwsprToolUseId: 'todo',
// message.userInputMessageContext?.toolResults
// message.toolUses
})
})
} catch (e: any) {
getLogger().error('Unable to record ______ telemetry')
}
}

public recordToolUseSuggested(toolUse: ToolUse, messageId: string) {
try {
telemetry.amazonq_toolUseSuggested.run((span) => {
Expand Down
47 changes: 27 additions & 20 deletions packages/core/src/shared/db/chatDb/chatDb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import path from 'path'
import { fs } from '../../fs/fs'
import { getLogger } from '../../logger/logger'
import { ChatMessage, ToolResultStatus } from '@amzn/codewhisperer-streaming'
import { CWCTelemetryHelper } from '../../../codewhispererChat/controllers/chat/telemetryHelper'

// Maximum number of characters to keep in history
const MaxConversationHistoryCharacters = 600_000
Expand Down Expand Up @@ -275,6 +276,7 @@ export class Database {
? message.body
: tabData?.title || 'Amazon Q Chat'
message = this.formatChatHistoryMessage(message)
message.characterCount = this.calculateMessageCharacterCount(message)
if (tabData) {
this.logger.info(`Found existing tab data, updating conversations`)
tabData.conversations = updateOrCreateConversation(tabData.conversations, conversationId, message)
Expand All @@ -292,6 +294,7 @@ export class Database {
conversations: [{ conversationId, clientType: ClientType.VSCode, messages: [message] }],
})
}
CWCTelemetryHelper.instance.record_TODO(tabId, conversationId, message)
}
}

Expand Down Expand Up @@ -419,31 +422,35 @@ export class Database {
private calculateCharacterCount(allMessages: Message[]): number {
let count = 0
for (const message of allMessages) {
// Count characters of all message text
count += message.body.length

// Count characters in tool uses
if (message.toolUses) {
try {
for (const toolUse of message.toolUses) {
count += JSON.stringify(toolUse).length
}
} catch (e) {
this.logger.error(`Error counting toolUses: ${String(e)}`)
count += message.characterCount ?? 0
}
this.logger.debug(`Current history characters: ${count}`)
return count
}

private calculateMessageCharacterCount(message: Message): number {
let count = message.body.length

// Count characters in tool uses
if (message.toolUses) {
try {
for (const toolUse of message.toolUses) {
count += JSON.stringify(toolUse).length
}
} catch (e) {
this.logger.error(`Error counting toolUses: ${String(e)}`)
}
// Count characters in tool results
if (message.userInputMessageContext?.toolResults) {
try {
for (const toolResul of message.userInputMessageContext.toolResults) {
count += JSON.stringify(toolResul).length
}
} catch (e) {
this.logger.error(`Error counting toolResults: ${String(e)}`)
}
// Count characters in tool results
if (message.userInputMessageContext?.toolResults) {
try {
for (const toolResul of message.userInputMessageContext.toolResults) {
count += JSON.stringify(toolResul).length
}
} catch (e) {
this.logger.error(`Error counting toolResults: ${String(e)}`)
}
}
this.logger.debug(`Current history characters: ${count}`)
return count
}

Expand Down
1 change: 1 addition & 0 deletions packages/core/src/shared/db/chatDb/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ export type Message = {
userInputMessageContext?: UserInputMessageContext
toolUses?: ToolUse[]
shouldDisplayMessage?: boolean
characterCount?: number
}

/**
Expand Down
Loading