First commit.
This commit is contained in:
35
python/baseController.py
Normal file
35
python/baseController.py
Normal file
@@ -0,0 +1,35 @@
|
||||
class BaseController:
|
||||
|
||||
def set_stream_func(self, stream_func):
|
||||
self._stream_func = stream_func
|
||||
|
||||
def send(self, data):
|
||||
if getattr(self, "_stream_func", None) is not None:
|
||||
self._stream_func(data)
|
||||
|
||||
def setProperty(self, params):
|
||||
name = params.get("name")
|
||||
value = params.get("value")
|
||||
|
||||
if not isinstance(name, str):
|
||||
return {"error": "Property name must be a string"}
|
||||
|
||||
if not hasattr(self, name):
|
||||
return {"error": f"Property '{name}' does not exist"}
|
||||
|
||||
setattr(self, name, value)
|
||||
|
||||
return {"success": True}
|
||||
|
||||
|
||||
def getProperty(self, params):
|
||||
|
||||
name = params.get("name")
|
||||
|
||||
if not hasattr(self, name):
|
||||
|
||||
return {"error": f"Property '{name}' does not exist"}
|
||||
|
||||
value = getattr(self, name)
|
||||
|
||||
return {"value": value}
|
||||
41
python/controller.py
Normal file
41
python/controller.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import time
|
||||
|
||||
from baseController import BaseController
|
||||
|
||||
class Controller(BaseController):
|
||||
|
||||
model = None
|
||||
|
||||
tokenizer = None
|
||||
|
||||
counter = 0
|
||||
|
||||
def getModelPath(self, params):
|
||||
|
||||
return {"Model": self.model}
|
||||
|
||||
def getTokenizer(self, params):
|
||||
|
||||
return {"Tokenizer": self.tokenizer}
|
||||
|
||||
def increment(self, params):
|
||||
|
||||
self.counter += params.get("by", 1)
|
||||
|
||||
return {"counter": self.counter}
|
||||
|
||||
def reset(self, params):
|
||||
|
||||
self.counter = 0
|
||||
|
||||
return {"counter": self.counter}
|
||||
|
||||
def testStream(self, params):
|
||||
|
||||
for i in range(5):
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
self.send({"partial": f"step {i+1} complete"})
|
||||
|
||||
return {"counter": self.counter}
|
||||
5
python/index.py
Normal file
5
python/index.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from router import Router
|
||||
|
||||
if __name__ == "__main__":
|
||||
router = Router()
|
||||
router.run()
|
||||
42
python/router.py
Normal file
42
python/router.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import time
|
||||
from controller import Controller
|
||||
import sys
|
||||
import json
|
||||
|
||||
class Router:
|
||||
def __init__(self):
|
||||
self.controller = Controller()
|
||||
self.controller.send = self.send_stream # inject send method here
|
||||
|
||||
def send_response(self, response):
|
||||
print(json.dumps(response))
|
||||
sys.stdout.flush()
|
||||
|
||||
def send_stream(self, stream_data):
|
||||
print("__STREAM__" + json.dumps(stream_data))
|
||||
sys.stdout.flush()
|
||||
|
||||
def run(self):
|
||||
for line in sys.stdin:
|
||||
if not line.strip():
|
||||
continue
|
||||
|
||||
try:
|
||||
message = json.loads(line)
|
||||
method = message.get("method")
|
||||
params = message.get("params", {})
|
||||
|
||||
if not hasattr(self.controller, method):
|
||||
self.send_response({"error": f"Method '{method}' not found in ./python/controller.py"})
|
||||
continue
|
||||
|
||||
method_to_call = getattr(self.controller, method)
|
||||
|
||||
# Call method WITHOUT stream_func argument,
|
||||
# controller methods use self.send() internally
|
||||
result = method_to_call(params)
|
||||
|
||||
self.send_response({"result": result})
|
||||
|
||||
except Exception as e:
|
||||
self.send_response({"error": str(e)})
|
||||
4
python/test_import.py
Normal file
4
python/test_import.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from controller import Controller
|
||||
|
||||
c = Controller()
|
||||
print(c.increment({"by": 3}))
|
||||
Reference in New Issue
Block a user