anymous telemetry based on redhat (#212)

* initial telemetry

* fixed segment bugs

* Move telemetry impl to submodule, add more actions

* Replace privacy policy link, minor refactoring

---------

Co-authored-by: Carl-Robert Linnupuu <carlrobertoh@gmail.com>
This commit is contained in:
keith siilats 2023-09-27 11:44:01 -04:00 committed by GitHub
parent 05c7560ec9
commit 8f9980fbf1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
56 changed files with 5348 additions and 32 deletions

View file

@ -11,8 +11,10 @@ import com.intellij.openapi.roots.ui.componentsList.components.ScrollablePanel;
import com.intellij.ui.JBColor;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.util.ui.JBUI;
import ee.carlrobert.codegpt.TelemetryService;
import ee.carlrobert.codegpt.completions.CompletionRequestHandler;
import ee.carlrobert.codegpt.completions.SerpResult;
import ee.carlrobert.codegpt.completions.TelemetryAction;
import ee.carlrobert.codegpt.conversations.Conversation;
import ee.carlrobert.codegpt.conversations.ConversationService;
import ee.carlrobert.codegpt.conversations.message.Message;
@ -111,7 +113,11 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
}
var messageWrapper = createNewMessageWrapper(message.getId());
messageWrapper.add(new UserMessagePanel(project, message, message.getUserMessage() != null, this));
messageWrapper.add(new UserMessagePanel(
project,
message,
message.getUserMessage() != null,
this));
var responsePanel = new ResponsePanel()
.withReloadAction(() -> reloadMessage(message, conversation))
.withDeleteAction(() -> deleteMessage(message.getId(), messageWrapper, conversation))
@ -134,7 +140,11 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
return OpenAICredentialsManager.getInstance().isApiKeySet();
}
private void call(Conversation conversation, Message message, ResponsePanel responsePanel, boolean isRetry) {
private void call(
Conversation conversation,
Message message,
ResponsePanel responsePanel,
boolean isRetry) {
ChatMessageResponseBody responseContainer = (ChatMessageResponseBody) responsePanel.getContent();
if (!isCredentialSet()) {
@ -167,13 +177,22 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
if (containsResults) {
message.setSerpResults(serpResults.stream()
.map(result -> new SerpResult(result.getUrl(), result.getName(), result.getSnippet(), result.getSnippetSource()))
.map(result -> new SerpResult(
result.getUrl(),
result.getName(),
result.getSnippet(),
result.getSnippetSource()))
.collect(toList()));
}
});
requestHandler.addTokensExceededListener(() -> SwingUtilities.invokeLater(() -> {
var answer = OverlayUtils.showTokenLimitExceededDialog();
if (answer == OK) {
TelemetryService.instance().action(TelemetryAction.IDE_ACTION.getCode())
.property("action", "DISCARD_TOKEN_LIMIT")
.property("model", conversation.getModel())
.send();
conversationService.discardTokenLimits(conversation);
requestHandler.call(conversation, message, true);
} else {
@ -185,9 +204,14 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
responseContainer.displayError(error.getMessage());
stopStreaming(responseContainer);
});
requestHandler.addSerpResultsListener(serpResults -> serpResultsMapping.put(message.getId(), serpResults.stream()
.map(result -> new SerpResult(result.getUrl(), result.getName(), result.getSnippet(), result.getSnippetSource()))
.collect(toList())));
requestHandler.addSerpResultsListener(
serpResults -> serpResultsMapping.put(message.getId(), serpResults.stream()
.map(result -> new SerpResult(
result.getUrl(),
result.getName(),
result.getSnippet(),
result.getSnippetSource()))
.collect(toList())));
userPromptTextArea.setRequestHandler(requestHandler);
userPromptTextArea.setSubmitEnabled(false);
requestHandler.call(conversation, message, isRetry);
@ -196,7 +220,8 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
protected void reloadMessage(Message message, Conversation conversation) {
ResponsePanel responsePanel = null;
try {
responsePanel = (ResponsePanel) Arrays.stream(visibleMessagePanels.get(message.getId()).getComponents())
responsePanel = (ResponsePanel) Arrays.stream(
visibleMessagePanels.get(message.getId()).getComponents())
.filter(component -> component instanceof ResponsePanel)
.findFirst().orElseThrow();
((ChatMessageResponseBody) responsePanel.getContent()).clear();
@ -259,7 +284,8 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
var selectionModel = editor.getSelectionModel();
var selectedText = selectionModel.getSelectedText();
if (selectedText != null && !selectedText.isEmpty()) {
var fileExtension = FileUtils.getFileExtension(((EditorImpl) editor).getVirtualFile().getName());
var fileExtension = FileUtils.getFileExtension(
((EditorImpl) editor).getVirtualFile().getName());
message = new Message(text + format("\n```%s\n%s\n```", fileExtension, selectedText));
message.setUserMessage(text);
selectionModel.removeSelection();
@ -293,7 +319,6 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridy = 1;
var model = getModel();
var modelIconWrapper = JBUI.Panels.simplePanel(
new ModelIconLabel(getClientCode(), model)).withBorder(JBUI.Borders.empty(0, 0, 8, 4));