From c44d0ffbdf8006bea3c1d8257177078c44469510 Mon Sep 17 00:00:00 2001 From: geens Date: Sat, 16 Nov 2024 21:51:18 +0100 Subject: [PATCH] Fixes for runpod test --- readme.md => README.md | 0 install.sh | 23 +++++++++++++++++++++++ sia/local_llm_engine.py | 7 +++++-- sia/repeat_entry.py | 17 ++++++++++------- sia/response_parser.py | 7 ++++++- sia/single_entry.py | 14 +++++++++----- web/src/components/App.jsx | 3 +-- web/tailwind.config.js | 6 ++++-- 8 files changed, 58 insertions(+), 19 deletions(-) rename readme.md => README.md (100%) create mode 100644 install.sh diff --git a/readme.md b/README.md similarity index 100% rename from readme.md rename to README.md diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..4c198ce --- /dev/null +++ b/install.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +cd / +git clone https://git.nielsgeens.be/llm/SIA.git +cd /SIA +pip3 install -r requirements.txt + +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash +nvm install node +cd /SIA/web +npm install +npm install -D tailwindcss +npm run build +mv /root/SIA/web/dist/ /root/SIA/static + +apt update +apt install -y vim tmux +vim .env + +cd /root/SIA +python3 -m sia + +#The SIA source is located in /SIA. Not all features are implemented yet. Look at the readme and code to find what is missing. Make sure to unit test your work. \ No newline at end of file diff --git a/sia/local_llm_engine.py b/sia/local_llm_engine.py index c5683ec..3e4840d 100644 --- a/sia/local_llm_engine.py +++ b/sia/local_llm_engine.py @@ -72,7 +72,7 @@ class LocalLlmEngine(LlmEngine): text_inputs=prompt, do_sample=True, temperature=self._temperature, - max_new_tokens=self._token_limit, + max_new_tokens=self.token_limit(), streamer=streamer ) thread = Thread(target=self._pipeline, kwargs=pipeline_kwargs) @@ -106,4 +106,7 @@ class LocalLlmEngine(LlmEngine): Returns: int: Maximum number of tokens the model can process """ - return self._pipeline.model.config.max_position_embeddings \ No newline at end of file + if self._token_limit is not None: + return self._token_limit + else: + return self._pipeline.model.config.max_position_embeddings \ No newline at end of file diff --git a/sia/repeat_entry.py b/sia/repeat_entry.py index 84a35a8..92d705e 100644 --- a/sia/repeat_entry.py +++ b/sia/repeat_entry.py @@ -99,19 +99,22 @@ class RepeatEntry(Entry): element = ET.Element("repeat", { "id": self.id, }) + if self._timeout: + element.set("timeout", str(self._timeout)) element.text = self.script - if self._exit_code is not None: - element.set("exit_code", str(self._exit_code)) if self._timed_out: element.set("timed_out", "true") - else: - if len(self._stdout) > self._limit: + elif self._exit_code is not None: + element.set("exit_code", str(self._exit_code)) + if self._limit: + element.set("limit", str(self._limit)) + if len(self._stdout) > (self._limit or self.default_limit): element.set("stdout_truncated", "true") stdout_elem = ET.SubElement(element, "stdout") - stdout_elem.text = self._stdout[:self._limit] - if len(self._stderr) > self._limit: + stdout_elem.text = self._stdout[:(self._limit or self.default_limit)] + if len(self._stderr) > (self._limit or self.default_limit): element.set("stderr_truncated", "true") stderr_elem = ET.SubElement(element, "stderr") - stderr_elem.text = self._stderr[:self._limit] + stderr_elem.text = self._stderr[:(self._limit or self.default_limit)] return element \ No newline at end of file diff --git a/sia/response_parser.py b/sia/response_parser.py index 93660bf..a701e8e 100644 --- a/sia/response_parser.py +++ b/sia/response_parser.py @@ -62,8 +62,13 @@ class ResponseParser: entry_id = str(uuid.uuid4()) timestamp = datetime.now() + parser = ET.XMLPullParser(events=("start", "end")) + parser.feed(xml) + root = None try: - root = ET.fromstring(xml.strip()) + for event, root in parser.read_events(): + if event == "start": + break except ET.ParseError as e: return ParseErrorEntry(entry_id, timestamp, xml, f"Invalid XML: {str(e)}") diff --git a/sia/single_entry.py b/sia/single_entry.py index ae53834..7540b0b 100644 --- a/sia/single_entry.py +++ b/sia/single_entry.py @@ -43,7 +43,7 @@ class SingleEntry(Entry): super().__init__(id, timestamp) self._script = script self._timeout = timeout or self.default_timeout - self._limit = limit or self.default_limit + self._limit = limit self._stdout = "" self._stderr = "" self._exit_code: Optional[int] = None @@ -102,17 +102,21 @@ class SingleEntry(Entry): element = ET.Element("single", { "id": self.id, }) + if self._timeout: + element.set("timeout", str(self._timeout)) element.text = self.script if self._timed_out: element.set("timed_out", "true") elif self._executed: element.set("exit_code", str(self._exit_code)) - if len(self._stdout) > self._limit: + if self._limit: + element.set("limit", str(self._limit)) + if len(self._stdout) > (self._limit or self.default_limit): element.set("stdout_truncated", "true") stdout_elem = ET.SubElement(element, "stdout") - stdout_elem.text = self._stdout[:self._limit] - if len(self._stderr) > self._limit: + stdout_elem.text = self._stdout[:(self._limit or self.default_limit)] + if len(self._stderr) > (self._limit or self.default_limit): element.set("stderr_truncated", "true") stderr_elem = ET.SubElement(element, "stderr") - stderr_elem.text = self._stderr[:self._limit] + stderr_elem.text = self._stderr[:(self._limit or self.default_limit)] return element \ No newline at end of file diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index a0e391e..9cf12af 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -30,8 +30,7 @@ const App = () => { response_timeout: 10.0 }); - const { wsState, sendMessage, addMessageHandler } = useWebSocket('ws://localhost:8080/ws'); - + const { wsState, sendMessage, addMessageHandler } = useWebSocket(`${window.location.protocol === 'https:' ? 'wss:' : 'ws:'}//${window.location.host}/ws`); useEffect(() => { addMessageHandler((message) => { switch(message.type) { diff --git a/web/tailwind.config.js b/web/tailwind.config.js index b878bd1..1622761 100644 --- a/web/tailwind.config.js +++ b/web/tailwind.config.js @@ -1,5 +1,7 @@ +import tailwindcssAnimate from "tailwindcss-animate"; + /** @type {import('tailwindcss').Config} */ -module.exports = { +export default { darkMode: ["class"], content: ["./src/**/*.{js,jsx}"], theme: { @@ -63,5 +65,5 @@ module.exports = { }, }, }, - plugins: [require("tailwindcss-animate")], + plugins: [tailwindcssAnimate], } \ No newline at end of file