in server/aws-lsp-codewhisperer/src/language-server/chat/chatEventParser.ts [79:144]
public processPartialEvent(chatEvent: ChatResponseStream): Result<ChatResultWithMetadata, string> {
const {
messageMetadataEvent,
followupPromptEvent,
supplementaryWebLinksEvent,
codeReferenceEvent,
assistantResponseEvent,
error,
invalidStateEvent,
} = chatEvent
if (!this.#metric.metric.cwsprTimeToFirstChunk) {
this.#metric.mergeWith({
cwsprTimeToFirstChunk: this.#metric.getTimeElapsed(),
cwsprChatTimeBetweenChunks: [],
})
} else {
this.#metric.mergeWith({
cwsprChatTimeBetweenChunks: [Date.now() - this.#lastChunkTime],
})
}
this.#lastChunkTime = Date.now()
if (error) {
this.error = error.message
} else if (invalidStateEvent) {
this.error = invalidStateEvent.message ?? invalidStateEvent.reason ?? 'Invalid state'
} else if (assistantResponseEvent?.content) {
this.#totalEvents.assistantResponseEvent += 1
this.body = (this.body ?? '') + assistantResponseEvent.content
} else if (followupPromptEvent?.followupPrompt) {
this.#totalEvents.followupPromptEvent += 1
const { content } = followupPromptEvent.followupPrompt
this.followUp = {
text: ChatEventParser.FOLLOW_UP_TEXT,
options: [
...(this.followUp?.options ?? []),
{
pillText: content ?? '',
prompt: content ?? '',
},
],
}
} else if (
supplementaryWebLinksEvent?.supplementaryWebLinks &&
supplementaryWebLinksEvent.supplementaryWebLinks.length > 0
) {
this.#totalEvents.supplementaryWebLinksEvent += 1
const sourceLinks = supplementaryWebLinksEvent.supplementaryWebLinks.map(ChatEventParser.mapRelatedData)
this.relatedContent = {
...this.relatedContent,
content: [...(this.relatedContent?.content ?? []), ...sourceLinks],
}
} else if (codeReferenceEvent?.references && codeReferenceEvent.references.length > 0) {
this.#totalEvents.codeReferenceEvent += 1
const references = codeReferenceEvent.references.map(ChatEventParser.mapReferenceData)
this.codeReference = [...(this.codeReference ?? []), ...references]
} else if (messageMetadataEvent?.conversationId) {
this.conversationId = messageMetadataEvent?.conversationId
}
return this.getResult()
}