mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-11 01:32:08 +10:00
chatbot enhancements
This commit is contained in:
+1
-1
@@ -53,7 +53,7 @@ public class SummarizeNetlistAction extends AbstractAction {
|
||||
throw new Exception("The generated netlist is empty, nothing to show.");
|
||||
}
|
||||
|
||||
return summarizer.summarize(netlists, null);
|
||||
return summarizer.summarize(netlists);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,93 +17,6 @@ public class ChatbotPane extends JPanel {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(ChatbotPane.class);
|
||||
|
||||
public static final String ASSISTANT = "assistant";
|
||||
public static final String SYSTEM = "system";
|
||||
public static final String USER = "user";
|
||||
public static final String TEMPORARY = "temporary";
|
||||
|
||||
String[] electronicsQuestions = {
|
||||
"What is Ohm's Law, and how do voltage, current, and resistance relate to each other?",
|
||||
"Why are resistors important in circuits, and what happens if the resistor value is incorrect?",
|
||||
"What is a capacitor, and how does it behave differently from a resistor?",
|
||||
"How does an inductor work, and where might you find one in common DIY projects?",
|
||||
"What's the difference between AC (Alternating Current) and DC (Direct Current), and where is each used?",
|
||||
"How do diodes work, and why are they essential in electronics?",
|
||||
"What's the difference between series and parallel circuits, and why does it matter?",
|
||||
"How does a transistor function, and what role does it typically play in a circuit?",
|
||||
"Why is grounding important in electronic circuits, and what exactly does it do?",
|
||||
"What is impedance, and why is it important when connecting speakers or audio equipment?",
|
||||
"What exactly is an operational amplifier (op amp), and what are its common uses in audio circuits?",
|
||||
"How does a relay work, and when would you choose a relay over a transistor or MOSFET?",
|
||||
"What's the purpose of using a fuse or circuit breaker in a DIY electronics project?",
|
||||
"Why do certain electronic components need specific voltage ratings?",
|
||||
"What is electromagnetic interference (EMI), and how can you minimize it in your projects?",
|
||||
"What does polarity mean for components like electrolytic capacitors and diodes, and why is it important?",
|
||||
"How does filtering work to remove unwanted noise from audio signals or power supplies?",
|
||||
"What is signal clipping in audio circuits, and how can you prevent it?",
|
||||
"Why do some circuits require a heatsink, and how do heatsinks help protect components?",
|
||||
"What is frequency response, and why is it crucial for audio circuits like guitar pedals and amplifiers?",
|
||||
"How do you calculate the correct resistor value for limiting current to an LED?",
|
||||
"What is the role of a voltage regulator, and how does it keep voltage stable?",
|
||||
"How can you measure and verify voltage and current safely using a multimeter?",
|
||||
"What does it mean when a circuit is described as having a 'high input impedance' or 'low output impedance,' and why does it matter?",
|
||||
"How can you determine if components in your circuit are properly rated for the voltage and current they're experiencing?"
|
||||
};
|
||||
|
||||
String[] diylcQuestions = {
|
||||
"How do I add a component to my layout in DIYLC?",
|
||||
"How can I quickly find a specific component in DIYLC?s component toolbox?",
|
||||
"How do I move or reposition components on the canvas in DIYLC?",
|
||||
"How do I edit or change a component?s properties (e.g. value or color) in DIYLC?",
|
||||
"Is there a shortcut to duplicate or repeat the last component I placed in DIYLC?",
|
||||
"How can I group multiple components so I can move or edit them together in DIYLC?",
|
||||
"What are ?building blocks? in DIYLC and how do I create or use them?",
|
||||
"How do I save my DIYLC project and reopen it later on?",
|
||||
"How do I export my DIYLC layout as an image or PDF file?",
|
||||
"Can DIYLC generate a bill of materials (BOM) for my project, and how would I do that?",
|
||||
"How can I change or hide different layers in a DIYLC project to manage overlapping components?",
|
||||
"Is it possible to view the underside of a board in DIYLC, and how can I enable that?",
|
||||
"What does the ?Highlight Connected Areas? feature do in DIYLC and how do I use it for debugging?",
|
||||
"How can I analyze a guitar wiring diagram using DIYLC?s built-in tools?",
|
||||
"How do I assign a custom keyboard shortcut to a component in DIYLC for quick access?",
|
||||
"What are component variants in DIYLC and how can I create and apply them?",
|
||||
"What is the continuous creation mode in DIYLC and how does it help when adding many components?",
|
||||
"How can I create a custom component to add to DIYLC?s component library?",
|
||||
"Does DIYLC support plug-ins, and how can I add new functionality to the app with them?",
|
||||
"What is the DIYLC cloud feature and how can I share or download projects using it?"
|
||||
};
|
||||
|
||||
String[] circuitQuestions = {
|
||||
"What's the purpose of this specific resistor in my circuit?",
|
||||
"How do I correctly determine capacitor values for my power supply?",
|
||||
"How should I route wiring to reduce interference and noise?",
|
||||
"Which component should I choose for this switching application, a MOSFET or BJT?",
|
||||
"How do I verify if my ground connections are optimal?",
|
||||
"Why might this transistor get hot during operation?",
|
||||
"What's the best approach to simplify this section of my circuit?",
|
||||
"How can I ensure my circuit is safe against short circuits?",
|
||||
"What could be causing voltage instability in this circuit?",
|
||||
"How do I properly size resistors to protect LEDs?",
|
||||
"What are the steps to debug unexpected oscillations in my circuit?",
|
||||
"Should I add a bypass capacitor here, and what value should I use?",
|
||||
"How can I check if my components are operating within their rated specifications?",
|
||||
"Is this the right way to connect multiple power rails in my design?",
|
||||
"How can I test my circuit before physically assembling it?",
|
||||
"What are good layout practices to minimize electromagnetic interference?",
|
||||
"How do I identify if my circuit has any redundant or unnecessary components?",
|
||||
"Why might the voltage regulator not output the expected voltage?",
|
||||
"What's the recommended method for isolating digital and analog grounds?",
|
||||
"How do I safely integrate high-voltage components into my DIY circuit?",
|
||||
"Why isn't my LED lighting up when powered?",
|
||||
"How do I troubleshoot a circuit that's drawing more current than expected?",
|
||||
"Why does my amplifier circuit produce a humming or buzzing sound?",
|
||||
"How can I detect and fix intermittent connections in my circuit?",
|
||||
"What should I check if my circuit isn't responding to input signals as expected?",
|
||||
"How do I determine if my soldering joints are causing reliability issues?",
|
||||
"What steps can I take if my microcontroller circuit isn't functioning as intended?",
|
||||
"How do I troubleshoot a noisy or unstable sensor reading?"
|
||||
};
|
||||
|
||||
public static Font DEFAULT_FONT = new Font("Square721 BT", Font.PLAIN, 12);
|
||||
private static final Font MONOSPACED_FONT = new Font("Monospaced", Font.PLAIN, 12);
|
||||
@@ -113,10 +26,9 @@ public class ChatbotPane extends JPanel {
|
||||
|
||||
private ISwingUI swingUI;
|
||||
private IPlugInPort plugInPort;
|
||||
private ChatbotPresenter chatbotPresenter;
|
||||
|
||||
private JLabel titleLabel;
|
||||
private JTextArea promptArea;
|
||||
private JScrollPane chatScrollPane;
|
||||
private JEditorPane chatEditorPane;
|
||||
private JButton askButton;
|
||||
private JButton clearButton;
|
||||
@@ -125,6 +37,7 @@ public class ChatbotPane extends JPanel {
|
||||
super();
|
||||
this.swingUI = swingUI;
|
||||
this.plugInPort = plugInPort;
|
||||
this.chatbotPresenter = new ChatbotPresenter(plugInPort);
|
||||
setName("AI Assistant");
|
||||
|
||||
// Set panel background color
|
||||
@@ -148,17 +61,6 @@ public class ChatbotPane extends JPanel {
|
||||
gbc.gridwidth = 2; // Span both columns
|
||||
add(chatScrollPane, gbc);
|
||||
|
||||
// Prompt label
|
||||
JLabel promptLabel = new JLabel("Prompt:");
|
||||
promptLabel.setForeground(TERMINAL_FG);
|
||||
promptLabel.setFont(DEFAULT_FONT);
|
||||
gbc.gridx = 0;
|
||||
gbc.gridy = 2;
|
||||
gbc.weightx = 0.0;
|
||||
gbc.weighty = 0.0;
|
||||
gbc.gridwidth = 1;
|
||||
// add(promptLabel, gbc);
|
||||
|
||||
// Prompt scroll pane
|
||||
JScrollPane promptScrollPane = new JScrollPane(getPromptArea(),
|
||||
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
@@ -310,7 +212,7 @@ public class ChatbotPane extends JPanel {
|
||||
TERMINAL_FG.getRed(), TERMINAL_FG.getGreen(), TERMINAL_FG.getBlue(),
|
||||
TERMINAL_BG.getRed(), TERMINAL_BG.getGreen(), TERMINAL_BG.getBlue());
|
||||
|
||||
String sampleChat = getInitialChatContents();
|
||||
String sampleChat = chatbotPresenter.getInitialChatContents();
|
||||
|
||||
chatEditorPane.setContentType("text/html");
|
||||
chatEditorPane.setText(htmlStyle + "<body><pre>" + sampleChat + "</pre></body>");
|
||||
@@ -318,29 +220,6 @@ public class ChatbotPane extends JPanel {
|
||||
return chatEditorPane;
|
||||
}
|
||||
|
||||
private String getInitialChatContents() {
|
||||
Random r = new Random();
|
||||
|
||||
String chatHtml =
|
||||
"<div class='system'>Welcome to the DIYLC AI Assistant!</div><br><br>\n" +
|
||||
"<div class='assistant'>I'm here to help you design, build, and troubleshoot your electronics projects using DIY Layout Creator (DIYLC). You can ask me questions about:</div><br>\n" +
|
||||
// "<ul>\n" +
|
||||
"\n" +
|
||||
"- <b>Electronics theory or concepts:</b> <i>e.g.,</i> '<span class='user'>" + electronicsQuestions[r.nextInt(
|
||||
electronicsQuestions.length)] + "</span>'<br>\n" +
|
||||
"- <b>DIYLC features and usage:</b> <i>e.g.,</i> '<span class='user'>" + diylcQuestions[r.nextInt(diylcQuestions.length)] + "</span>'<br>\n" +
|
||||
"- <b>Your current circuit project:</b> <i>e.g.,</i> '<span class='user'>" + circuitQuestions[r.nextInt(circuitQuestions.length)] + "</span>'<br>\n" +
|
||||
// "</ul><br>\n" +
|
||||
"<br>\n" +
|
||||
"<div class='assistant'>Feel free to ask your own question or use one of these examples to get started!</div><br>\n";
|
||||
|
||||
if (!CloudPresenter.Instance.isLoggedIn()) {
|
||||
chatHtml = chatHtml + "<div class='system' id='login'>Please log into your DIYLC Cloud account in order to use the AI Assistant.</div><br>\n";
|
||||
}
|
||||
|
||||
return chatHtml;
|
||||
}
|
||||
|
||||
public JButton getAskButton() {
|
||||
if (askButton == null) {
|
||||
askButton = new JButton("Ask");
|
||||
@@ -350,11 +229,10 @@ public class ChatbotPane extends JPanel {
|
||||
askButton.setBorderPainted(true);
|
||||
askButton.addActionListener(e -> {
|
||||
final String prompt = getPromptArea().getText();
|
||||
appendSection(USER, prompt);
|
||||
appendSection(TEMPORARY, "Waiting for the response...");
|
||||
appendSection(ChatbotPresenter.USER, prompt);
|
||||
appendSection(ChatbotPresenter.TEMPORARY, "Waiting for the response...");
|
||||
getPromptArea().setText(null);
|
||||
String currentFile = plugInPort.getCurrentFileName();
|
||||
String fileName = extractFileName(currentFile);
|
||||
|
||||
|
||||
getAskButton().setEnabled(false);
|
||||
getClearButton().setEnabled(false);
|
||||
@@ -362,19 +240,19 @@ public class ChatbotPane extends JPanel {
|
||||
|
||||
@Override
|
||||
public String doInBackground() throws Exception {
|
||||
return ChatbotPresenter.Instance.promptChatbot(fileName, "", prompt);
|
||||
return chatbotPresenter.promptChatbot(prompt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(Exception e) {
|
||||
appendSection(SYSTEM, "Failed to retrieve the response from the server. Error: " + e.getMessage());
|
||||
appendSection(ChatbotPresenter.SYSTEM, "Failed to retrieve the response from the server. Error: " + e.getMessage());
|
||||
LOG.error("Failed to retrieve the response from the server", e);
|
||||
getClearButton().setEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void complete(String result) {
|
||||
appendSection(ASSISTANT, result);
|
||||
appendSection(ChatbotPresenter.ASSISTANT, result);
|
||||
getClearButton().setEnabled(true);
|
||||
}
|
||||
}, false);
|
||||
@@ -396,24 +274,6 @@ public class ChatbotPane extends JPanel {
|
||||
getChatEditorPane().setText(text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the base file name without extension from a full path.
|
||||
* For example: "/path/to/myfile.diy" returns "myfile"
|
||||
*/
|
||||
private String extractFileName(String path) {
|
||||
if (path == null || path.isEmpty()) {
|
||||
return "Untitled";
|
||||
}
|
||||
// Get the last part after the last separator
|
||||
String fileName = path.substring(path.lastIndexOf(File.separator) + 1);
|
||||
// Remove the extension if present
|
||||
int dotIndex = fileName.lastIndexOf('.');
|
||||
if (dotIndex > 0) {
|
||||
fileName = fileName.substring(0, dotIndex);
|
||||
}
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public JButton getClearButton() {
|
||||
if (clearButton == null) {
|
||||
clearButton = new JButton("Clear");
|
||||
|
||||
Reference in New Issue
Block a user