Add files via upload
This commit is contained in:
parent
bf88cf87d9
commit
7dde288320
1 changed files with 74 additions and 0 deletions
74
LLMCLI.java
Normal file
74
LLMCLI.java
Normal file
|
@ -0,0 +1,74 @@
|
|||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class LLMCLI {
|
||||
public static void main(String[] args) {
|
||||
// Path to the .exe file
|
||||
String exePath = "bin/llama-cli.exe";
|
||||
|
||||
System.out.println("Enter -h for help");
|
||||
// Scanner to take user input for various commands
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
|
||||
while (true) {
|
||||
String commandInput = scanner.nextLine();
|
||||
|
||||
// Split user input into command array for ProcessBuilder
|
||||
String[] commands = commandInput.split(" ");
|
||||
|
||||
// Create an array to hold both the executable path and the commands
|
||||
String[] fullCommand = new String[commands.length + 1];
|
||||
fullCommand[0] = exePath; // First element is the executable path
|
||||
System.arraycopy(commands, 0, fullCommand, 1, commands.length); // Copy the user commands after the exe path
|
||||
|
||||
Process process = null;
|
||||
|
||||
try {
|
||||
// Create a ProcessBuilder with the executable and dynamic commands
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(fullCommand);
|
||||
|
||||
// Redirect error stream to read both error and output in one stream
|
||||
processBuilder.redirectErrorStream(true);
|
||||
|
||||
// Start the process
|
||||
process = processBuilder.start();
|
||||
|
||||
// Capture output in a separate thread
|
||||
Process finalProcess = process;
|
||||
new Thread(() -> {
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(finalProcess.getInputStream()))) {
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
System.out.println(line);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
|
||||
// Use OutputStream to send input to the process (if needed)
|
||||
try (OutputStream processInput = process.getOutputStream()) {
|
||||
String userInput;
|
||||
while (scanner.hasNextLine() && process.isAlive()) {
|
||||
userInput = scanner.nextLine();
|
||||
processInput.write((userInput + "\n").getBytes());
|
||||
processInput.flush(); // Ensure input is sent immediately
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for the process to complete and get the exit code
|
||||
int exitCode = process.waitFor();
|
||||
} catch (IOException | InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
// Ensure the process is destroyed if still running
|
||||
if (process != null) {
|
||||
process.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue