From 35ee02ba7928a4bdb6f0316dc002f3af8a3e46d4 Mon Sep 17 00:00:00 2001
From: Carl-Robert Linnupuu
Date: Tue, 2 Apr 2024 20:43:26 +0300
Subject: [PATCH] feat: display total tokens for all providers (closes #397)
---
.../chat/ChatToolWindowTabPanel.java | 18 +++++++++--
.../chat/ui/textarea/TotalTokensPanel.java | 20 ++++++++++++-
.../ui/textarea/UserPromptTextAreaHeader.java | 30 -------------------
3 files changed, 34 insertions(+), 34 deletions(-)
delete mode 100644 src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/UserPromptTextAreaHeader.java
diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java
index a3a13784..3a9194b9 100644
--- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java
+++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java
@@ -6,11 +6,13 @@ import static java.lang.String.format;
import static java.util.stream.Collectors.toList;
import com.intellij.openapi.Disposable;
+import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.openapi.project.Project;
import com.intellij.ui.JBColor;
import com.intellij.util.ui.JBUI;
+import com.intellij.util.ui.JBUI.Borders;
import ee.carlrobert.codegpt.CodeGPTKeys;
import ee.carlrobert.codegpt.EncodingManager;
import ee.carlrobert.codegpt.ReferencedFile;
@@ -30,10 +32,10 @@ import ee.carlrobert.codegpt.toolwindow.chat.ui.ChatMessageResponseBody;
import ee.carlrobert.codegpt.toolwindow.chat.ui.ChatToolWindowScrollablePanel;
import ee.carlrobert.codegpt.toolwindow.chat.ui.ResponsePanel;
import ee.carlrobert.codegpt.toolwindow.chat.ui.UserMessagePanel;
+import ee.carlrobert.codegpt.toolwindow.chat.ui.textarea.ModelComboBoxAction;
import ee.carlrobert.codegpt.toolwindow.chat.ui.textarea.TotalTokensDetails;
import ee.carlrobert.codegpt.toolwindow.chat.ui.textarea.TotalTokensPanel;
import ee.carlrobert.codegpt.toolwindow.chat.ui.textarea.UserPromptTextArea;
-import ee.carlrobert.codegpt.toolwindow.chat.ui.textarea.UserPromptTextAreaHeader;
import ee.carlrobert.codegpt.util.EditorUtil;
import ee.carlrobert.codegpt.util.file.FileUtil;
import java.awt.BorderLayout;
@@ -267,9 +269,8 @@ public abstract class ChatToolWindowTabPanel implements Disposable {
JBUI.Borders.customLine(JBColor.border(), 1, 0, 0, 0),
JBUI.Borders.empty(8)));
var contentManager = project.getService(StandardChatToolWindowContentManager.class);
- panel.add(JBUI.Panels.simplePanel(new UserPromptTextAreaHeader(
+ panel.add(JBUI.Panels.simplePanel(createUserPromptTextAreaHeader(
selectedService,
- totalTokensPanel,
() -> {
ConversationService.getInstance().startConversation();
contentManager.createNewTabPanel();
@@ -278,6 +279,17 @@ public abstract class ChatToolWindowTabPanel implements Disposable {
return panel;
}
+ private JPanel createUserPromptTextAreaHeader(
+ ServiceType selectedService,
+ Runnable onModelChange) {
+ return JBUI.Panels.simplePanel()
+ .withBorder(Borders.emptyBottom(8))
+ .andTransparent()
+ .addToLeft(totalTokensPanel)
+ .addToRight(new ModelComboBoxAction(onModelChange, selectedService)
+ .createCustomComponent(ActionPlaces.UNKNOWN));
+ }
+
private JPanel createRootPanel() {
var gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/TotalTokensPanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/TotalTokensPanel.java
index 88763678..c9b0da5c 100644
--- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/TotalTokensPanel.java
+++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/TotalTokensPanel.java
@@ -17,6 +17,8 @@ import ee.carlrobert.codegpt.EncodingManager;
import ee.carlrobert.codegpt.ReferencedFile;
import ee.carlrobert.codegpt.actions.IncludeFilesInContextNotifier;
import ee.carlrobert.codegpt.conversations.Conversation;
+import ee.carlrobert.codegpt.settings.GeneralSettings;
+import ee.carlrobert.codegpt.settings.service.ServiceType;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
@@ -154,12 +156,28 @@ public class TotalTokensPanel extends JPanel {
entry.getKey(),
entry.getValue()))
.collect(Collectors.joining());
- iconLabel.setToolTipText("" + html + "");
+ iconLabel.setToolTipText(getIconToolTipText(html));
}
});
return iconLabel;
}
+ private String getIconToolTipText(String html) {
+ if (GeneralSettings.getCurrentState().getSelectedService() != ServiceType.OPENAI) {
+ return """
+
+
+ ⓘ Keep in mind that the output values might vary across different
+ large language models due to variations in their encoding methods.
+
+
+ %s
+ """.formatted(html);
+ }
+ return "";
+ }
+
private String getLabelHtml(int total) {
return format("Tokens: %d", total);
}
diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/UserPromptTextAreaHeader.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/UserPromptTextAreaHeader.java
deleted file mode 100644
index 0c5374f2..00000000
--- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/UserPromptTextAreaHeader.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package ee.carlrobert.codegpt.toolwindow.chat.ui.textarea;
-
-import com.intellij.openapi.actionSystem.ActionPlaces;
-import com.intellij.util.ui.JBUI;
-import ee.carlrobert.codegpt.settings.service.ServiceType;
-import java.awt.BorderLayout;
-import javax.swing.JPanel;
-
-public class UserPromptTextAreaHeader extends JPanel {
-
- public UserPromptTextAreaHeader(
- ServiceType selectedService,
- TotalTokensPanel totalTokensPanel,
- Runnable onModelChange) {
- super(new BorderLayout());
- setOpaque(false);
- setBorder(JBUI.Borders.emptyBottom(8));
- switch (selectedService) {
- case OPENAI:
- case AZURE:
- add(totalTokensPanel, BorderLayout.LINE_START);
- break;
- case YOU:
- break;
- default:
- }
- add(new ModelComboBoxAction(onModelChange, selectedService)
- .createCustomComponent(ActionPlaces.UNKNOWN), BorderLayout.LINE_END);
- }
-}