forked from neurodock/NeuroDock
b1aa35e1b1
- GradleAPI - Launcher - MALAPITool Started finishing up the File handeling module in Core - Added ReadFileTool.java which allowes to read files from this contained "file system" modulized dependency for the API Updated for Launcher.java to use class and method refrence to entry point to remove hard dependency Added a @SafeVarargs to OllamaObject.java made OllamaObject.OllamaObjectBuilder#addFileTools not throw IllegalArgumentException and instead add the tooling and return the builder Added overloaded constructor OllamaToolErrorException#OllamaToolErrorException(String, Exception) to allow for forwarding of exceptions, although this is not recomended PythonRunner - Fixed bugs with it under Linux host(this MUST be refractord to support Windows and Mac hosts) - Added a overwrite for default python print method to send prints over the external_tools socket to be put into output log for the runner - Cleaned up some stuff - Updated to properly refer to files - Fixed cmd.sh generation - Removed old "-c" addition to the command - Removed old code related to how logs pulled from containers standerd output's - Updated the generation of external_tools.py to respect pythons requirment of optinal arguments being after all required Updated Tool#addTool to respect the standerd of spring boot's return model
188 lines
8.8 KiB
Java
188 lines
8.8 KiB
Java
package me.zacharias.chat.display;
|
|
|
|
import me.zacharias.chat.api.APIApplication;
|
|
import me.zacharias.chat.core.Core;
|
|
import me.zacharias.chat.core.Pair;
|
|
import me.zacharias.chat.core.PrintMessageHandler;
|
|
import me.zacharias.chat.core.files.FileHandlerLocation;
|
|
import me.zacharias.chat.core.memory.CoreMemory;
|
|
import me.zacharias.chat.mal.api.MALAPITool;
|
|
import me.zacharias.chat.ollama.*;
|
|
import me.zacharias.chat.ollama.utils.SystemMessage;
|
|
import me.zacharias.neuro.dock.genius.GeniusTools;
|
|
import me.zacharias.neuro.dock.wikipedia.WikipediaTool;
|
|
import org.json.JSONObject;
|
|
|
|
import java.io.*;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.Method;
|
|
import java.util.*;
|
|
|
|
import static me.zacharias.chat.core.Core.writeLog;
|
|
|
|
/**
|
|
* The main class of the Display.<br>
|
|
* This is the main class for running as a Terminal application.<br>
|
|
* Somewhat meant to be used as a Debug tool for testing your API.
|
|
*/
|
|
public class Display {
|
|
|
|
/**
|
|
* The Core instance.
|
|
*/
|
|
Core core = new Core(new PrintMessageHandler() {
|
|
@Override
|
|
public void printMessage(String message) {
|
|
System.out.println(">> "+message);
|
|
}
|
|
|
|
@Override
|
|
public boolean color() {
|
|
return true;
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Creates a new instance of Display.<br>
|
|
* This Creates the OllamaObject and adds the tools to it. as well as handles the display of the messages. and the input from the user.
|
|
*/
|
|
public Display()
|
|
{
|
|
|
|
core.setOllamaObject/*NoMemory*/(OllamaObject.builder()
|
|
.setModel("llama3.1:8b")
|
|
.keep_alive(10)
|
|
//.stream(false)
|
|
.addFileTools(FileHandlerLocation.DATA_FILES)
|
|
.addMessages(new SystemMessage("You need to emulate feelings and emotions."))
|
|
.build());
|
|
|
|
core.enablePlugins(Core.PLUGIN_DIRECTORY);
|
|
|
|
core.addTool(new TimeTool(), Core.Source.INTERNAL);
|
|
// TODO: Well Docker failes when luanched.... Fuck
|
|
core.addTool(new PythonRunner(core), Core.Source.INTERNAL);
|
|
core.addTools(new MALAPITool().getOllamaTools());
|
|
core.addTools(new GeniusTools().getGeniusTools());
|
|
core.addTools(new WikipediaTool().getWikipediaToolsInstance());
|
|
|
|
//APIApplication.start();
|
|
|
|
//core.getOllamaObject().addMessage(new OllamaMessage(OllamaMessageRole.SYSTEM, "Have a nice tone and use formal wording"));
|
|
|
|
writeLog("Creating base OllamaObject with model: "+core.getOllamaObject().getModel());
|
|
|
|
System.out.println("Installed tools");
|
|
writeLog("Tools installed in this instance");
|
|
|
|
for(Pair<OllamaFunctionTool, String> funtion : core.getFuntionTools())
|
|
{
|
|
StringBuilder args = new StringBuilder();
|
|
OllamaPerameter perameter = funtion.getKey().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.getKey().name()+"("+args+") ["+funtion.getValue()+"]");
|
|
writeLog("Function: "+funtion.getKey().name()+"("+args+") ["+funtion.getValue()+"]");
|
|
}
|
|
|
|
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
|
|
|
System.out.println("Message Transcription:");
|
|
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.
|
|
/list Lists all available tools.
|
|
/corelist Lists all tools according to the OllamaObject.
|
|
/working Prints the current working directories.
|
|
/peek Peeks the current memory.
|
|
""");
|
|
break;
|
|
case "bye":
|
|
writeLog("Exiting program...");
|
|
System.out.println("Bye!");
|
|
System.exit(0);
|
|
return;
|
|
case "write":
|
|
Core.flushLog();
|
|
break;
|
|
case "peek":
|
|
CoreMemory coreMemory = CoreMemory.getInstance();
|
|
StringBuilder buffer = new StringBuilder("[");
|
|
ArrayList<String> memory = new ArrayList<>(coreMemory.getMemoriesArray());
|
|
for(int i = 0; i < memory.size(); i++) {
|
|
String mem = memory.get(i);
|
|
buffer.append("\"").append(mem).append("\"");
|
|
if(i+1 < memory.size()) {
|
|
buffer.append(", ");
|
|
}
|
|
}
|
|
buffer.append("]");
|
|
writeLog("Memory peek: "+buffer.toString());
|
|
System.out.println(buffer.toString());
|
|
break;
|
|
case "list":
|
|
writeLog("Tools installed in this instance");
|
|
|
|
for(Pair<OllamaFunctionTool, String> funtion : core.getFuntionTools()) {
|
|
StringBuilder args = new StringBuilder();
|
|
OllamaPerameter perameter = funtion.getKey().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.getKey().name() + "(" + args + ") [" + funtion.getValue() + "]");
|
|
writeLog("Function: " + funtion.getKey().name() + "(" + args + ") [" + funtion.getValue() + "]");
|
|
}
|
|
break;
|
|
case "corelist":
|
|
writeLog("Tools installed in this instance acording to the coire OllamaObject");
|
|
|
|
for(Pair<OllamaTool, String> funtion : core.getOllamaObject().getTools()) {
|
|
System.out.println("> Function: " + funtion.getKey().toString());
|
|
writeLog("Function: " + funtion.getKey().toString());
|
|
}
|
|
break;
|
|
case "working":
|
|
System.out.println("Working directories:\n" +
|
|
" Data: " + Core.DATA_DIR.getAbsolutePath() + "\n" +
|
|
" DateFiles: " + FileHandlerLocation.DATA_FILES + "\n" +
|
|
" Plugins: " + Core.PLUGIN_DIRECTORY.getAbsolutePath());
|
|
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);
|
|
}
|
|
}
|
|
}
|