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); - } -}