forked from Chat_things/NeuroDock
Basicly refactord the entire project into a modular nature
This commit is contained in:
4
.idea/gradle.xml
generated
4
.idea/gradle.xml
generated
@@ -9,6 +9,10 @@
|
|||||||
<option name="modules">
|
<option name="modules">
|
||||||
<set>
|
<set>
|
||||||
<option value="$PROJECT_DIR$" />
|
<option value="$PROJECT_DIR$" />
|
||||||
|
<option value="$PROJECT_DIR$/API" />
|
||||||
|
<option value="$PROJECT_DIR$/Core" />
|
||||||
|
<option value="$PROJECT_DIR$/Display" />
|
||||||
|
<option value="$PROJECT_DIR$/luancher" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
</GradleProjectSettings>
|
</GradleProjectSettings>
|
||||||
|
|||||||
20
API/build.gradle
Normal file
20
API/build.gradle
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
plugins {
|
||||||
|
id 'java'
|
||||||
|
}
|
||||||
|
|
||||||
|
group = 'me.zacharias'
|
||||||
|
version = '1.0-SNAPSHOT'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(":Core")
|
||||||
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
|
useJUnitPlatform()
|
||||||
|
}
|
||||||
|
|
||||||
|
jar{
|
||||||
|
manifest {
|
||||||
|
attributes 'Main-Class': 'me.zacharias.char.api.APIServer'
|
||||||
|
}
|
||||||
|
}
|
||||||
12
API/src/main/java/me/zacharias/chat/api/APIEndpoints.java
Normal file
12
API/src/main/java/me/zacharias/chat/api/APIEndpoints.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package me.zacharias.chat.api;
|
||||||
|
|
||||||
|
public enum APIEndpoints {
|
||||||
|
// API request endpoints
|
||||||
|
ADD_TOOL,
|
||||||
|
QUERY,
|
||||||
|
|
||||||
|
// API response endpoints
|
||||||
|
RESPONSE,
|
||||||
|
USE_TOOL,
|
||||||
|
|
||||||
|
}
|
||||||
13
API/src/main/java/me/zacharias/chat/api/APIServer.java
Normal file
13
API/src/main/java/me/zacharias/chat/api/APIServer.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package me.zacharias.chat.api;
|
||||||
|
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class APIServer {
|
||||||
|
ArrayList<Client> clientsList = new ArrayList<>();
|
||||||
|
ServerSocket serverSocket;
|
||||||
|
|
||||||
|
public APIServer(int port, String redirectedOutput) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
4
API/src/main/java/me/zacharias/chat/api/Client.java
Normal file
4
API/src/main/java/me/zacharias/chat/api/Client.java
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
package me.zacharias.chat.api;
|
||||||
|
|
||||||
|
public class Client {
|
||||||
|
}
|
||||||
16
Core/build.gradle
Normal file
16
Core/build.gradle
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
plugins {
|
||||||
|
id 'java-library'
|
||||||
|
}
|
||||||
|
|
||||||
|
group = 'me.zacharias'
|
||||||
|
version = '1.0-SNAPSHOT'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
languageVersion.set(JavaLanguageVersion.of(21)) // Set Java version
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package me.zacharias.chat;
|
package me.zacharias.chat.core;
|
||||||
|
|
||||||
import me.zacharias.chat.ollama.*;
|
import me.zacharias.chat.ollama.*;
|
||||||
import me.zacharias.chat.ollama.exceptions.OllamaToolErrorException;
|
import me.zacharias.chat.ollama.exceptions.OllamaToolErrorException;
|
||||||
@@ -7,25 +7,28 @@ import org.json.JSONObject;
|
|||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class Main {
|
public class Core {
|
||||||
private String ollamaIP = "localhost";//"192.168.5.184";
|
|
||||||
private int ollamaPort = 11434;
|
|
||||||
private URL url;
|
|
||||||
|
|
||||||
private static File logFile = new File("./logs/latest.log");
|
private static File logFile = new File("./logs/latest.log");
|
||||||
private static BufferedWriter logWriter;
|
private static BufferedWriter logWriter;
|
||||||
private ScheduledExecutorService scheduler;
|
private ScheduledExecutorService scheduler;
|
||||||
|
|
||||||
private OllamaObject ollamaObject;
|
private OllamaObject ollamaObject;
|
||||||
private ArrayList<OllamaFuntionTool> funtionTools;
|
private ArrayList<OllamaFuntionTool> funtionTools = new ArrayList<>();
|
||||||
|
|
||||||
|
private String ollamaIP = "localhost";//"192.168.5.184";
|
||||||
|
private int ollamaPort = 11434;
|
||||||
|
private URL url;
|
||||||
|
|
||||||
|
private final PrintMessageHandler printMessageHandler;
|
||||||
|
private boolean supportColor;
|
||||||
|
|
||||||
{
|
{
|
||||||
File dir = new File("./logs/");
|
File dir = new File("./logs/");
|
||||||
@@ -79,14 +82,7 @@ public class Main {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}, 0, 3, TimeUnit.MINUTES);
|
}, 0, 3, TimeUnit.MINUTES);
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
new Main();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Main()
|
|
||||||
{
|
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
||||||
scheduler.shutdownNow();
|
scheduler.shutdownNow();
|
||||||
try {
|
try {
|
||||||
@@ -113,91 +109,32 @@ public class Main {
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
ollamaObject = OllamaObject.builder()
|
|
||||||
.setModel("llama3-AI")
|
|
||||||
.keep_alive(10)
|
|
||||||
.addTool(new TimeTool())
|
|
||||||
.addTool(new PythonRunner())
|
|
||||||
.stream(false)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
writeLog("Creating base OllamaObject with model: "+ollamaObject.getModel());
|
|
||||||
|
|
||||||
funtionTools = new ArrayList<>();
|
|
||||||
|
|
||||||
System.out.println("Installed tools");
|
|
||||||
writeLog("Tools installed in this instance");
|
|
||||||
|
|
||||||
for(OllamaTool tool : ollamaObject.getTools())
|
|
||||||
{
|
|
||||||
if(tool instanceof OllamaFuntionTool funtion)
|
|
||||||
{
|
|
||||||
StringBuilder args = new StringBuilder();
|
|
||||||
OllamaPerameter perameter = funtion.parameters();
|
|
||||||
if(perameter != null) {
|
|
||||||
JSONObject obj = perameter.getProperties();
|
|
||||||
for (String name : obj.keySet()) {
|
|
||||||
args.append(args.toString().isBlank() ? "" : ", ").append(obj.getJSONObject(name).getString("type")).append(Arrays.stream(perameter.getRequired()).anyMatch(str -> str.equalsIgnoreCase(name)) ? "" : "?").append(" ").append(name);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("> Function: "+funtion.name()+"("+args+")");
|
public Core(PrintMessageHandler printMessageHandler) {
|
||||||
writeLog("Function: "+funtion.name()+"("+args+")");
|
this.printMessageHandler = printMessageHandler;
|
||||||
funtionTools.add(funtion);
|
supportColor = printMessageHandler.color();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
public void setOllamaObject(OllamaObject ollamaObject) {
|
||||||
|
this.ollamaObject = ollamaObject;
|
||||||
|
}
|
||||||
|
|
||||||
System.out.println("Message Trsnscription:");
|
public OllamaObject getOllamaObject() {
|
||||||
|
return ollamaObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addFuntionTool(OllamaFuntionTool funtionTool) {
|
||||||
|
funtionTools.add(funtionTool);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void flushLog() {
|
||||||
try {
|
try {
|
||||||
while (true) {
|
|
||||||
System.out.print("> ");
|
|
||||||
StringBuilder message = new StringBuilder(br.readLine());
|
|
||||||
while(br.ready())
|
|
||||||
{
|
|
||||||
message.append("\n").append(br.readLine());
|
|
||||||
}
|
|
||||||
if(message.toString().startsWith("/"))
|
|
||||||
{
|
|
||||||
switch (message.substring(1)) {
|
|
||||||
case "help":
|
|
||||||
System.out.print("""
|
|
||||||
Available commands:
|
|
||||||
/help Prints this help message.
|
|
||||||
/bye Exits the program.
|
|
||||||
/write Flushes the current log stream to file.
|
|
||||||
""");
|
|
||||||
break;
|
|
||||||
case "bye":
|
|
||||||
writeLog("Exiting program...");
|
|
||||||
System.out.println("Bye!");
|
|
||||||
System.exit(0);
|
|
||||||
return;
|
|
||||||
case "write":
|
|
||||||
logWriter.flush();
|
logWriter.flush();
|
||||||
break;
|
}catch (IOException e) {}
|
||||||
default:
|
|
||||||
System.out.println("Unknown command: "+message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
writeLog("User: "+message);
|
|
||||||
ollamaObject.addMessage(new OllamaMessage(OllamaMessageRole.USER, message.toString()));
|
|
||||||
//System.out.println(ollamaObject.toString());
|
|
||||||
handleResponce(qurryOllama(ollamaObject));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
System.out.println("Exiting due to exception");
|
|
||||||
System.exit(-1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONObject qurryOllama(OllamaObject request)
|
public JSONObject qurryOllama()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
@@ -207,7 +144,7 @@ public class Main {
|
|||||||
connection.setConnectTimeout(80*1000);
|
connection.setConnectTimeout(80*1000);
|
||||||
|
|
||||||
try(DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) {
|
try(DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) {
|
||||||
wr.writeBytes(request.toString());
|
wr.writeBytes(ollamaObject.toString());
|
||||||
wr.flush();
|
wr.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,7 +171,7 @@ public class Main {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
connection.disconnect();
|
connection.disconnect();
|
||||||
System.out.println("Error: HTTP Response code - " + responseCode + "\n"+response.toString());
|
System.err.println("Error: HTTP Response code - " + responseCode + "\n"+response.toString());
|
||||||
throw new RuntimeException("HTTP Response code - " + responseCode);
|
throw new RuntimeException("HTTP Response code - " + responseCode);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -261,7 +198,7 @@ public class Main {
|
|||||||
|
|
||||||
if(functions.isEmpty()) {
|
if(functions.isEmpty()) {
|
||||||
ollamaObject.addMessage(new OllamaToolError("Function '"+function.getString("name")+"' does not exist"));
|
ollamaObject.addMessage(new OllamaToolError("Function '"+function.getString("name")+"' does not exist"));
|
||||||
System.out.println(">> \u001b[31mTried funtion call "+function.getString("name")+" but failed to find it.\u001b[0m");
|
printMessageHandler.printMessage((supportColor ?"\u001b[31m":"")+"Tried funtion call "+function.getString("name")+" but failed to find it."+(printMessageHandler.color()?"\u001b[0m":""));
|
||||||
writeLog("Failed function call to "+function.getString("name"));
|
writeLog("Failed function call to "+function.getString("name"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -279,32 +216,31 @@ public class Main {
|
|||||||
try {
|
try {
|
||||||
OllamaToolRespnce function1 = func.function(argumentArrayList.toArray(new OllamaFunctionArgument[0]));
|
OllamaToolRespnce function1 = func.function(argumentArrayList.toArray(new OllamaFunctionArgument[0]));
|
||||||
ollamaObject.addMessage(function1);
|
ollamaObject.addMessage(function1);
|
||||||
System.out.println(">> \u001b[34mCall " + func.name() + "\u001b[0m");
|
printMessageHandler.printMessage((supportColor?"\u001b[34m":"")+"Call "+func.name() + (printMessageHandler.color()?"\u001b[0m":""));
|
||||||
writeLog("Successfully function call " + func.name() + " output: " + function1.getResponse());
|
writeLog("Successfully function call " + func.name() + " output: " + function1.getResponse());
|
||||||
} catch (OllamaToolErrorException e) {
|
} catch (OllamaToolErrorException e) {
|
||||||
ollamaObject.addMessage(new OllamaToolError(e.getMessage()));
|
ollamaObject.addMessage(new OllamaToolError(e.getMessage()));
|
||||||
System.out.println(">> \u001b[31mTried funtion call " + func.name() + " but failed due to " + e.getError() + "\u001b[0m");
|
printMessageHandler.printMessage((supportColor?"\u001b[31m":"")+"Tried funtion call " + func.name() + " but failed due to " + e.getError() + (supportColor?"\u001b[0m":""));
|
||||||
writeLog(e.getMessage());
|
writeLog(e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
checkIfResponceMessage(responce);
|
||||||
|
handleResponce(qurryOllama());
|
||||||
|
}
|
||||||
|
else checkIfResponceMessage(responce);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkIfResponceMessage(JSONObject responce) {
|
||||||
if(responce.getJSONObject("message").has("content") && !responce.getJSONObject("message").getString("content").isBlank())
|
if(responce.getJSONObject("message").has("content") && !responce.getJSONObject("message").getString("content").isBlank())
|
||||||
{
|
{
|
||||||
System.out.println(">> \u001b[32m"+responce.getJSONObject("message").getString("content")+"\u001b[0m");
|
printMessageHandler.printMessage((supportColor?"\u001b[32m":"")+responce.getJSONObject("message").getString("content")+(supportColor?"\u001b[0m":""));
|
||||||
writeLog("Response content: "+responce.getJSONObject("message").getString("content"));
|
writeLog("Response content: "+responce.getJSONObject("message").getString("content"));
|
||||||
ollamaObject.addMessage(new OllamaMessage(OllamaMessageRole.ASSISTANT, responce.getJSONObject("message").getString("content")));
|
ollamaObject.addMessage(new OllamaMessage(OllamaMessageRole.ASSISTANT, responce.getJSONObject("message").getString("content")));
|
||||||
}
|
}
|
||||||
handleResponce(qurryOllama(ollamaObject));
|
|
||||||
}
|
|
||||||
else if(responce.getJSONObject("message").has("content") && !responce.getJSONObject("message").getString("content").isBlank())
|
|
||||||
{
|
|
||||||
System.out.println(">> \u001b[32m"+responce.getJSONObject("message").getString("content")+"\u001b[0m");
|
|
||||||
writeLog("Response content: "+responce.getJSONObject("message").getString("content"));
|
|
||||||
ollamaObject.addMessage(new OllamaMessage(OllamaMessageRole.ASSISTANT, responce.getJSONObject("message").getString("content")));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void writeLog(String message)
|
public static void writeLog(String message)
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package me.zacharias.chat.core;
|
||||||
|
|
||||||
|
public interface PrintMessageHandler {
|
||||||
|
void printMessage(String message);
|
||||||
|
boolean color();
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ public class OllamaMessage {
|
|||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put("role", role);
|
json.put("role", role.getRole());
|
||||||
json.put("content", content);
|
json.put("content", content);
|
||||||
return json.toString();
|
return json.toString();
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
package me.zacharias.chat.ollama.exceptions;
|
package me.zacharias.chat.ollama.exceptions;
|
||||||
|
|
||||||
import me.zacharias.chat.ollama.OllamaToolRespnce;
|
|
||||||
|
|
||||||
public class OllamaToolErrorException extends RuntimeException {
|
public class OllamaToolErrorException extends RuntimeException {
|
||||||
private final String tool;
|
private final String tool;
|
||||||
private final String error;
|
private final String error;
|
||||||
20
Display/build.gradle
Normal file
20
Display/build.gradle
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
plugins {
|
||||||
|
id 'java'
|
||||||
|
}
|
||||||
|
|
||||||
|
group = 'me.zacharias'
|
||||||
|
version = '1.0-SNAPSHOT'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(":Core")
|
||||||
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
|
useJUnitPlatform()
|
||||||
|
}
|
||||||
|
|
||||||
|
jar{
|
||||||
|
manifest {
|
||||||
|
attributes 'Main-Class': 'me.zacharias.chat.display.Main'
|
||||||
|
}
|
||||||
|
}
|
||||||
106
Display/src/main/java/me/zacharias/chat/display/Display.java
Normal file
106
Display/src/main/java/me/zacharias/chat/display/Display.java
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
package me.zacharias.chat.display;
|
||||||
|
|
||||||
|
import me.zacharias.chat.core.Core;
|
||||||
|
import me.zacharias.chat.core.PrintMessageHandler;
|
||||||
|
import me.zacharias.chat.ollama.*;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static me.zacharias.chat.core.Core.writeLog;
|
||||||
|
|
||||||
|
public class Display {
|
||||||
|
|
||||||
|
Core core = new Core(new PrintMessageHandler() {
|
||||||
|
@Override
|
||||||
|
public void printMessage(String message) {
|
||||||
|
System.out.println(">> "+message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean color() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
public Display()
|
||||||
|
{
|
||||||
|
|
||||||
|
core.setOllamaObject(OllamaObject.builder()
|
||||||
|
.setModel("llama3-AI")
|
||||||
|
.keep_alive(10)
|
||||||
|
.addTool(new TimeTool())
|
||||||
|
.addTool(new PythonRunner())
|
||||||
|
.stream(false)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
writeLog("Creating base OllamaObject with model: "+core.getOllamaObject().getModel());
|
||||||
|
|
||||||
|
System.out.println("Installed tools");
|
||||||
|
writeLog("Tools installed in this instance");
|
||||||
|
|
||||||
|
for(OllamaTool tool : core.getOllamaObject().getTools())
|
||||||
|
{
|
||||||
|
if(tool instanceof OllamaFuntionTool funtion)
|
||||||
|
{
|
||||||
|
StringBuilder args = new StringBuilder();
|
||||||
|
OllamaPerameter perameter = funtion.parameters();
|
||||||
|
if(perameter != null) {
|
||||||
|
JSONObject obj = perameter.getProperties();
|
||||||
|
for (String name : obj.keySet()) {
|
||||||
|
args.append(args.toString().isBlank() ? "" : ", ").append(obj.getJSONObject(name).getString("type")).append(Arrays.stream(perameter.getRequired()).anyMatch(str -> str.equalsIgnoreCase(name)) ? "" : "?").append(" ").append(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("> Function: "+funtion.name()+"("+args+")");
|
||||||
|
writeLog("Function: "+funtion.name()+"("+args+")");
|
||||||
|
core.addFuntionTool(funtion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
|
||||||
|
System.out.println("Message Trsnscription:");
|
||||||
|
try {
|
||||||
|
while (true) {
|
||||||
|
System.out.print("> ");
|
||||||
|
StringBuilder message = new StringBuilder(br.readLine());
|
||||||
|
while (br.ready()) {
|
||||||
|
message.append("\n").append(br.readLine());
|
||||||
|
}
|
||||||
|
if (message.toString().startsWith("/")) {
|
||||||
|
switch (message.substring(1)) {
|
||||||
|
case "help":
|
||||||
|
System.out.print("""
|
||||||
|
Available commands:
|
||||||
|
/help Prints this help message.
|
||||||
|
/bye Exits the program.
|
||||||
|
/write Flushes the current log stream to file.
|
||||||
|
""");
|
||||||
|
break;
|
||||||
|
case "bye":
|
||||||
|
writeLog("Exiting program...");
|
||||||
|
System.out.println("Bye!");
|
||||||
|
System.exit(0);
|
||||||
|
return;
|
||||||
|
case "write":
|
||||||
|
core.flushLog();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println("Unknown command: " + message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
writeLog("User: " + message);
|
||||||
|
core.getOllamaObject().addMessage(new OllamaMessage(OllamaMessageRole.USER, message.toString()));
|
||||||
|
//System.out.println(ollamaObject.toString());
|
||||||
|
core.handleResponce(core.qurryOllama());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.out.println("Exiting due to exception");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,29 +1,25 @@
|
|||||||
package me.zacharias.chat;
|
package me.zacharias.chat.display;
|
||||||
|
|
||||||
import com.github.dockerjava.api.DockerClient;
|
import com.github.dockerjava.api.DockerClient;
|
||||||
import com.github.dockerjava.api.async.ResultCallback;
|
import com.github.dockerjava.api.async.ResultCallback;
|
||||||
import com.github.dockerjava.api.async.ResultCallbackTemplate;
|
|
||||||
import com.github.dockerjava.api.command.AttachContainerCmd;
|
|
||||||
import com.github.dockerjava.api.command.LogContainerCmd;
|
import com.github.dockerjava.api.command.LogContainerCmd;
|
||||||
import com.github.dockerjava.api.command.StartContainerCmd;
|
|
||||||
import com.github.dockerjava.api.model.Frame;
|
import com.github.dockerjava.api.model.Frame;
|
||||||
import com.github.dockerjava.core.DefaultDockerClientConfig;
|
import com.github.dockerjava.core.DefaultDockerClientConfig;
|
||||||
import com.github.dockerjava.core.DockerClientBuilder;
|
import com.github.dockerjava.core.DockerClientBuilder;
|
||||||
import com.github.dockerjava.core.DockerClientConfig;
|
import me.zacharias.chat.ollama.OllamaFunctionArgument;
|
||||||
import com.github.dockerjava.core.command.LogContainerResultCallback;
|
import me.zacharias.chat.ollama.OllamaFuntionTool;
|
||||||
import me.zacharias.chat.ollama.*;
|
import me.zacharias.chat.ollama.OllamaPerameter;
|
||||||
|
import me.zacharias.chat.ollama.OllamaToolRespnce;
|
||||||
import me.zacharias.chat.ollama.exceptions.OllamaToolErrorException;
|
import me.zacharias.chat.ollama.exceptions.OllamaToolErrorException;
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Base64;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import static me.zacharias.chat.Main.writeLog;
|
import static me.zacharias.chat.core.Core.writeLog;
|
||||||
|
|
||||||
public class PythonRunner extends OllamaFuntionTool {
|
public class PythonRunner extends OllamaFuntionTool {
|
||||||
DockerClient dockerClient;
|
DockerClient dockerClient;
|
||||||
@@ -172,7 +168,7 @@ public class PythonRunner extends OllamaFuntionTool {
|
|||||||
logContainerCmd.exec(new ResultCallback.Adapter<Frame>() {
|
logContainerCmd.exec(new ResultCallback.Adapter<Frame>() {
|
||||||
@Override
|
@Override
|
||||||
public void onNext(Frame item) {
|
public void onNext(Frame item) {
|
||||||
logs.add(item.toString());
|
logs.add(new String(item.getPayload()).trim());
|
||||||
}
|
}
|
||||||
}).awaitCompletion();
|
}).awaitCompletion();
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package me.zacharias.chat;
|
package me.zacharias.chat.display;
|
||||||
|
|
||||||
import me.zacharias.chat.ollama.OllamaFunctionArgument;
|
import me.zacharias.chat.ollama.OllamaFunctionArgument;
|
||||||
import me.zacharias.chat.ollama.OllamaFuntionTool;
|
import me.zacharias.chat.ollama.OllamaFuntionTool;
|
||||||
19
build.gradle
19
build.gradle
@@ -6,21 +6,18 @@ plugins {
|
|||||||
group = 'me.zacharias'
|
group = 'me.zacharias'
|
||||||
version = '1.0-SNAPSHOT'
|
version = '1.0-SNAPSHOT'
|
||||||
|
|
||||||
repositories {
|
allprojects {
|
||||||
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
subprojects {
|
||||||
|
apply plugin: 'java'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
implementation("org.json:json:20250107")
|
implementation("org.json:json:20250107")
|
||||||
implementation("com.github.docker-java:docker-java:3.4.1")
|
implementation("com.github.docker-java:docker-java:3.4.1")
|
||||||
}
|
|
||||||
|
|
||||||
test {
|
|
||||||
useJUnitPlatform()
|
|
||||||
}
|
|
||||||
|
|
||||||
jar{
|
|
||||||
manifest {
|
|
||||||
attributes 'Main-Class': 'me.zacharias.chat.Main'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
11
luancher/build.gradle
Normal file
11
luancher/build.gradle
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
plugins {
|
||||||
|
id 'java'
|
||||||
|
}
|
||||||
|
|
||||||
|
group = 'me.zacharias'
|
||||||
|
version = '1.0-SNAPSHOT'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(":Display")
|
||||||
|
implementation project(":API")
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package me.zacharias.chat.luancher;
|
||||||
|
|
||||||
|
import me.zacharias.chat.api.APIServer;
|
||||||
|
import me.zacharias.chat.display.Display;
|
||||||
|
|
||||||
|
public class Launcher {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
boolean serverMode = false;
|
||||||
|
int port = 39075;
|
||||||
|
String redirectedOutput = null;
|
||||||
|
|
||||||
|
for (int i = 0; i < args.length; i++) {
|
||||||
|
String arg = args[i].toLowerCase();
|
||||||
|
String argValue = (i + 1 < args.length) ? args[i + 1] : null;
|
||||||
|
|
||||||
|
switch (arg) {
|
||||||
|
case "-s", "--server" -> serverMode = true;
|
||||||
|
case "-p", "--port" -> {
|
||||||
|
if (argValue != null) {
|
||||||
|
port = Integer.parseInt(argValue);
|
||||||
|
} else {
|
||||||
|
System.out.println("Missing argument for -p or --port option");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "-o", "--output" -> {
|
||||||
|
if (argValue != null) {
|
||||||
|
redirectedOutput = argValue;
|
||||||
|
} else {
|
||||||
|
System.out.println("Missing argument for -o or --output option");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "--api" -> {
|
||||||
|
System.out.println("API available at https://server.4zellen.se:3000/Zacharias/chat_thing/wiki/API-Docs");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
default -> System.out.println("Unknown argument: " + arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (redirectedOutput != null && !serverMode) {
|
||||||
|
System.out.println("Cannot run with a redirected output without running in server mode");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (serverMode) {
|
||||||
|
System.out.println("Starting in API mode...");
|
||||||
|
new APIServer(port, redirectedOutput);
|
||||||
|
} else {
|
||||||
|
System.out.println("Starting in Display mode...");
|
||||||
|
new Display();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
rootProject.name = 'AI-test'
|
rootProject.name = 'AI-test'
|
||||||
|
include 'API', 'Core', 'Display', 'luancher'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user