Major upgrade in backends structure. Now you can build your own backend

This commit is contained in:
ParisNeo 2023-04-24 21:24:18 +02:00
parent ddafde66d5
commit 917600f412
11 changed files with 133 additions and 114 deletions

View File

@ -215,8 +215,8 @@ Now you're ready to work!
# Supported backends
Two backends are now supported:
1 - The llama_cpp backend
2 - The GPT-j backend
1 - [The llama_cpp backend](https://github.com/nomic-ai/pygpt4all)
2 - [The GPT-j backend](https://github.com/marella/gpt4all-j)
3 - Hugging face's Transformers (under construction)
# Supported models

4
app.py
View File

@ -146,8 +146,8 @@ class Gpt4AllWebUI(GPT4AllAPI):
)
def list_backends(self):
backends_dir = Path('./pyGpt4All/backends') # replace with the actual path to the models folder
backends = [f.stem for f in backends_dir.glob('*.py') if f.stem!="backend" and f.stem!="__init__"]
backends_dir = Path('./backends') # replace with the actual path to the models folder
backends = [f.stem for f in backends_dir.iterdir() if f.is_dir()]
return jsonify(backends)

View File

@ -10,7 +10,7 @@
from pathlib import Path
from typing import Callable
from gpt4allj import Model
from pyGpt4All.backends.backend import GPTBackend
from pyGpt4All.backend import GPTBackend
__author__ = "parisneo"
__github__ = "https://github.com/nomic-ai/gpt4all-ui"

View File

@ -11,7 +11,7 @@ from pathlib import Path
from typing import Callable
from transformers import AutoTokenizer
from transformers import AutoModelForCausalLM
from pyGpt4All.backends.backend import GPTBackend
from pyGpt4All.backend import GPTBackend
__author__ = "parisneo"
__github__ = "https://github.com/nomic-ai/gpt4all-ui"

View File

@ -10,7 +10,7 @@
from pathlib import Path
from typing import Callable
from pyllamacpp.model import Model
from pyGpt4All.backends.backend import GPTBackend
from pyGpt4All.backend import GPTBackend
__author__ = "parisneo"
__github__ = "https://github.com/nomic-ai/gpt4all-ui"

View File

@ -46,7 +46,7 @@ class GPT4AllAPI():
self.full_message_list = []
# Select backend
self.BACKENDS_LIST = {f.stem:f for f in (Path("pyGpt4All")/"backends").glob("*.py") if f.stem not in ["__init__","backend"]}
self.BACKENDS_LIST = {f.stem:f for f in Path("backends").iterdir() if f.is_dir()}
self.load_backend(self.BACKENDS_LIST[self.config["backend"]])
@ -86,7 +86,7 @@ class GPT4AllAPI():
module_name = backend_path.stem
# use importlib to load the module from the file path
loader = importlib.machinery.SourceFileLoader(module_name, str(absolute_path))
loader = importlib.machinery.SourceFileLoader(module_name, str(absolute_path/"__init__.py"))
backend_module = loader.load_module()
backend_class = getattr(backend_module, backend_module.backend_name)
self.backend = backend_class

View File

@ -5,4 +5,8 @@ pyyaml
markdown
pyllamacpp==1.0.6
gpt4all-j==0.2.1
--find-links https://download.pytorch.org/whl/cu117
torch==2.0.0
torchvision
torchaudio
transformers

View File

@ -14,16 +14,9 @@ function update_main(){
});
})
userInput.addEventListener('keydown', function(event) {
if (event.shiftKey && event.key === 'Enter') {
event.preventDefault();
userInput.style.height = userInput.scrollHeight + 'px';
userInput.value += '\n';
}
});
chatForm.addEventListener('submit', event => {
event.preventDefault();
function submit_form(){
console.log("Submitting")
// get user input and clear input field
@ -127,6 +120,28 @@ function update_main(){
}
readStream();
});
}
chatForm.addEventListener('submit', event => {
event.preventDefault();
submit_form();
});
userInput.addEventListener("keyup", function(event) {
// Check if Enter key was pressed while holding Shift
// Also check if Shift + Ctrl keys were pressed while typing
// These combinations override the submit action
const shiftPressed = event.shiftKey;
const ctrlPressed = event.ctrlKey && !event.metaKey;
if ((!shiftPressed) && event.key === "Enter") {
submit_form();
}
// Restore original functionality for the remaining cases
else if (!shiftPressed && ctrlPressed) {
setTimeout(() => {
userInput.focus();
contentEditable.value += event.data;
lastValue.innerHTML = userInput.value;
}, 0);
}
});
}

View File

@ -35,7 +35,7 @@
<div class="w-full flex justify-center">
<div class="w-full flex bottom-0 fixed rounded-sm shadow shadow-white bg-gray-300 p-1 dark:bg-gray-500 flex-wrap">
<form id="chat-form" class="w-full flex-row text-white mr-15 p-15">
<input type="text" id="user-input" placeholder="Type your message..." class="dark:bg-gray-600 pl-1 pr-1 py-1 my-1 mr-2 text-black dark:text-white outline-none drop-shadow-sm w-full rounded-md flex-1">
<textarea type="text" id="user-input" placeholder="Type your message..." class="dark:bg-gray-600 pl-1 pr-1 py-1 my-1 mr-2 text-black dark:text-white outline-none drop-shadow-sm w-full rounded-md flex-1"></textarea>
<div id="wait-animation" style="display: none;" class="lds-facebook bg-secondary my-1 mx-1 outline-none drop-shadow-sm w-full rounded-md p-2"><div></div><div></div><div></div></div>
<button id="stop-generation" style="display: none;" class="my-1 mx-1 outline-none px-4 dark:bg-gray-900 text-black dark:text-white rounded-md hover:bg-[#7ba0ea] active:bg-[#3d73e1] transition-colors ease-in-out">Stop generating</button>
<input type="submit" value="Send" id="submit-input" class="my-1 mx-1 outline-none px-4 dark:bg-gray-900 text-black dark:text-white rounded-md hover:bg-[#7ba0ea] active:bg-[#3d73e1] transition-colors ease-in-out">