Fixes for runpod test
This commit is contained in:
23
install.sh
Normal file
23
install.sh
Normal file
@@ -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.
|
||||||
@@ -72,7 +72,7 @@ class LocalLlmEngine(LlmEngine):
|
|||||||
text_inputs=prompt,
|
text_inputs=prompt,
|
||||||
do_sample=True,
|
do_sample=True,
|
||||||
temperature=self._temperature,
|
temperature=self._temperature,
|
||||||
max_new_tokens=self._token_limit,
|
max_new_tokens=self.token_limit(),
|
||||||
streamer=streamer
|
streamer=streamer
|
||||||
)
|
)
|
||||||
thread = Thread(target=self._pipeline, kwargs=pipeline_kwargs)
|
thread = Thread(target=self._pipeline, kwargs=pipeline_kwargs)
|
||||||
@@ -106,4 +106,7 @@ class LocalLlmEngine(LlmEngine):
|
|||||||
Returns:
|
Returns:
|
||||||
int: Maximum number of tokens the model can process
|
int: Maximum number of tokens the model can process
|
||||||
"""
|
"""
|
||||||
return self._pipeline.model.config.max_position_embeddings
|
if self._token_limit is not None:
|
||||||
|
return self._token_limit
|
||||||
|
else:
|
||||||
|
return self._pipeline.model.config.max_position_embeddings
|
||||||
@@ -99,19 +99,22 @@ class RepeatEntry(Entry):
|
|||||||
element = ET.Element("repeat", {
|
element = ET.Element("repeat", {
|
||||||
"id": self.id,
|
"id": self.id,
|
||||||
})
|
})
|
||||||
|
if self._timeout:
|
||||||
|
element.set("timeout", str(self._timeout))
|
||||||
element.text = self.script
|
element.text = self.script
|
||||||
if self._exit_code is not None:
|
|
||||||
element.set("exit_code", str(self._exit_code))
|
|
||||||
if self._timed_out:
|
if self._timed_out:
|
||||||
element.set("timed_out", "true")
|
element.set("timed_out", "true")
|
||||||
else:
|
elif self._exit_code is not None:
|
||||||
if len(self._stdout) > self._limit:
|
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")
|
element.set("stdout_truncated", "true")
|
||||||
stdout_elem = ET.SubElement(element, "stdout")
|
stdout_elem = ET.SubElement(element, "stdout")
|
||||||
stdout_elem.text = self._stdout[:self._limit]
|
stdout_elem.text = self._stdout[:(self._limit or self.default_limit)]
|
||||||
if len(self._stderr) > self._limit:
|
if len(self._stderr) > (self._limit or self.default_limit):
|
||||||
element.set("stderr_truncated", "true")
|
element.set("stderr_truncated", "true")
|
||||||
stderr_elem = ET.SubElement(element, "stderr")
|
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
|
return element
|
||||||
@@ -62,8 +62,13 @@ class ResponseParser:
|
|||||||
entry_id = str(uuid.uuid4())
|
entry_id = str(uuid.uuid4())
|
||||||
timestamp = datetime.now()
|
timestamp = datetime.now()
|
||||||
|
|
||||||
|
parser = ET.XMLPullParser(events=("start", "end"))
|
||||||
|
parser.feed(xml)
|
||||||
|
root = None
|
||||||
try:
|
try:
|
||||||
root = ET.fromstring(xml.strip())
|
for event, root in parser.read_events():
|
||||||
|
if event == "start":
|
||||||
|
break
|
||||||
except ET.ParseError as e:
|
except ET.ParseError as e:
|
||||||
return ParseErrorEntry(entry_id, timestamp, xml, f"Invalid XML: {str(e)}")
|
return ParseErrorEntry(entry_id, timestamp, xml, f"Invalid XML: {str(e)}")
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class SingleEntry(Entry):
|
|||||||
super().__init__(id, timestamp)
|
super().__init__(id, timestamp)
|
||||||
self._script = script
|
self._script = script
|
||||||
self._timeout = timeout or self.default_timeout
|
self._timeout = timeout or self.default_timeout
|
||||||
self._limit = limit or self.default_limit
|
self._limit = limit
|
||||||
self._stdout = ""
|
self._stdout = ""
|
||||||
self._stderr = ""
|
self._stderr = ""
|
||||||
self._exit_code: Optional[int] = None
|
self._exit_code: Optional[int] = None
|
||||||
@@ -102,17 +102,21 @@ class SingleEntry(Entry):
|
|||||||
element = ET.Element("single", {
|
element = ET.Element("single", {
|
||||||
"id": self.id,
|
"id": self.id,
|
||||||
})
|
})
|
||||||
|
if self._timeout:
|
||||||
|
element.set("timeout", str(self._timeout))
|
||||||
element.text = self.script
|
element.text = self.script
|
||||||
if self._timed_out:
|
if self._timed_out:
|
||||||
element.set("timed_out", "true")
|
element.set("timed_out", "true")
|
||||||
elif self._executed:
|
elif self._executed:
|
||||||
element.set("exit_code", str(self._exit_code))
|
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")
|
element.set("stdout_truncated", "true")
|
||||||
stdout_elem = ET.SubElement(element, "stdout")
|
stdout_elem = ET.SubElement(element, "stdout")
|
||||||
stdout_elem.text = self._stdout[:self._limit]
|
stdout_elem.text = self._stdout[:(self._limit or self.default_limit)]
|
||||||
if len(self._stderr) > self._limit:
|
if len(self._stderr) > (self._limit or self.default_limit):
|
||||||
element.set("stderr_truncated", "true")
|
element.set("stderr_truncated", "true")
|
||||||
stderr_elem = ET.SubElement(element, "stderr")
|
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
|
return element
|
||||||
@@ -30,8 +30,7 @@ const App = () => {
|
|||||||
response_timeout: 10.0
|
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(() => {
|
useEffect(() => {
|
||||||
addMessageHandler((message) => {
|
addMessageHandler((message) => {
|
||||||
switch(message.type) {
|
switch(message.type) {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
import tailwindcssAnimate from "tailwindcss-animate";
|
||||||
|
|
||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
module.exports = {
|
export default {
|
||||||
darkMode: ["class"],
|
darkMode: ["class"],
|
||||||
content: ["./src/**/*.{js,jsx}"],
|
content: ["./src/**/*.{js,jsx}"],
|
||||||
theme: {
|
theme: {
|
||||||
@@ -63,5 +65,5 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [require("tailwindcss-animate")],
|
plugins: [tailwindcssAnimate],
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user