Merge branch 'encode' into for_webui

This commit is contained in:
misyaguziya
2024-09-03 19:36:40 +09:00
7 changed files with 60 additions and 89 deletions

6
package-lock.json generated
View File

@@ -19,6 +19,7 @@
"eslint-plugin-react": "^7.34.2", "eslint-plugin-react": "^7.34.2",
"i18next": "^23.11.5", "i18next": "^23.11.5",
"jotai": "^2.8.3", "jotai": "^2.8.3",
"js-base64": "^3.7.7",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-i18next": "^14.1.2", "react-i18next": "^14.1.2",
@@ -4360,6 +4361,11 @@
} }
} }
}, },
"node_modules/js-base64": {
"version": "3.7.7",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz",
"integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw=="
},
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",

View File

@@ -27,6 +27,7 @@
"eslint-plugin-react": "^7.34.2", "eslint-plugin-react": "^7.34.2",
"i18next": "^23.11.5", "i18next": "^23.11.5",
"jotai": "^2.8.3", "jotai": "^2.8.3",
"js-base64": "^3.7.7",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-i18next": "^14.1.2", "react-i18next": "^14.1.2",

View File

@@ -1,3 +1,4 @@
import base64
from typing import Any from typing import Any
import json import json
import random import random
@@ -73,13 +74,31 @@ def splitList(lst:list, split_count:int, to_shuffle:bool=False):
split_lists.append(sub_list) split_lists.append(sub_list)
return split_lists return split_lists
def encodeUtf8(data:str) -> dict: def encodeBase64(data:str) -> dict:
data = {i: byte for i, byte in enumerate(data.encode('UTF-8'))} return json.loads(base64.b64decode(data).decode('utf-8'))
return data
def decodeUtf8(data:dict) -> str:
data = bytes(data.values()).decode("UTF-8")
return data
def printLog(log:str, data:Any=None) -> None: def printLog(log:str, data:Any=None) -> None:
print(json.dumps({"status":348, "log":log, "data":str(data)}), flush=True) response = {
"status": 348,
"log": log,
"data": data,
}
with open('process.log', 'a', encoding="utf-8") as f:
f.write(f"log: {response}\n")
response = json.dumps(response)
print(response, flush=True)
def printResponse(status:int, endpoint:str, result:Any=None) -> None:
response = {
"status": status,
"endpoint": endpoint,
"result": result,
}
with open('process.log', 'a', encoding="utf-8") as f:
f.write(f"log: {response}\n")
response = json.dumps(response)
print(response, flush=True)

View File

@@ -5,7 +5,7 @@ from subprocess import Popen
from threading import Thread from threading import Thread
from config import config from config import config
from model import model from model import model
from utils import getKeyByValue, isUniqueStrings, decodeUtf8, encodeUtf8, printLog from utils import getKeyByValue, isUniqueStrings, printLog, printResponse
# Common # Common
class DownloadSoftwareProgressBar: class DownloadSoftwareProgressBar:
@@ -289,7 +289,7 @@ class ChatMessage:
def send(self, data): def send(self, data):
id = data["id"] id = data["id"]
message = decodeUtf8(data["message"]) message = data["message"]
if len(message) > 0: if len(message) > 0:
# addSentMessageLog(message) # addSentMessageLog(message)
translation = "" translation = ""
@@ -329,8 +329,6 @@ class ChatMessage:
translation = f" ({translation})" translation = f" ({translation})"
model.logger.info(f"[SENT] {message}{translation}") model.logger.info(f"[SENT] {message}{translation}")
message = encodeUtf8(message)
translation = encodeUtf8(translation)
return {"status":200, return {"status":200,
"result":{ "result":{
"id":id, "id":id,
@@ -1284,13 +1282,7 @@ def init(endpoints:dict, *args, **kwargs) -> None:
printLog("Check Downloaded CTranslate2 Model Weight") printLog("Check Downloaded CTranslate2 Model Weight")
if config.USE_TRANSLATION_FEATURE is True and model.checkCTranslatorCTranslate2ModelWeight() is False: if config.USE_TRANSLATION_FEATURE is True and model.checkCTranslatorCTranslate2ModelWeight() is False:
def callback(progress): def callback(progress):
print(json.dumps({ printResponse(200, endpoints["ctranslate2"], {"progress":progress})
"endpoint":endpoints["ctranslate2"],
"status":200,
"result":{
"progress":progress
}
}), flush=True)
printLog("Download CTranslate2 Model Weight") printLog("Download CTranslate2 Model Weight")
model.downloadCTranslate2ModelWeight(callback) model.downloadCTranslate2ModelWeight(callback)
@@ -1305,13 +1297,7 @@ def init(endpoints:dict, *args, **kwargs) -> None:
printLog("Check Downloaded Whisper Model Weight") printLog("Check Downloaded Whisper Model Weight")
if config.USE_WHISPER_FEATURE is True and model.checkTranscriptionWhisperModelWeight() is False: if config.USE_WHISPER_FEATURE is True and model.checkTranscriptionWhisperModelWeight() is False:
def callback(progress): def callback(progress):
print(json.dumps({ printResponse(200, endpoints["whisper"], {"progress":progress})
"endpoint":endpoints["whisper"],
"status":200,
"result":{
"progress":progress
}
}), flush=True)
model.downloadWhisperModelWeight(callback) model.downloadWhisperModelWeight(callback)
# set word filter # set word filter

View File

@@ -3,7 +3,7 @@ import json
import time import time
from config import config from config import config
import webui_controller as controller import webui_controller as controller
from utils import printLog, encodeUtf8 from utils import printLog, printResponse, encodeBase64
config_mapping = { config_mapping = {
"/config/version": "VERSION", "/config/version": "VERSION",
@@ -270,51 +270,30 @@ class Action:
def transmit(self, key:str, data:dict) -> None: def transmit(self, key:str, data:dict) -> None:
status = data.get("status", None) status = data.get("status", None)
result = data.get("result", None) result = data.get("result", None)
response = { printResponse(status, self.endpoints[key], result)
"endpoint": self.endpoints[key],
"status": status,
"result": result,
}
response = json.dumps(response)
print(response, flush=True)
def main(): def main():
received_data = sys.stdin.readline().strip() received_data = sys.stdin.readline().strip()
received_data = json.loads(received_data) received_data = json.loads(received_data)
with open('process.log', 'a') as f:
f.write(f"received_data: {received_data}\n")
if received_data: if received_data:
endpoint = received_data.get("endpoint", None) endpoint = received_data.get("endpoint", None)
data = received_data.get("data", None) data = received_data.get("data", None)
data = encodeBase64(data) if data is not None else None
with open('process.log', 'a') as f: printLog(endpoint, data)
f.write(f"received_data : endpoint: {endpoint}, data:{data}\n")
try: try:
match endpoint.split("/")[1]: match endpoint.split("/")[1]:
case "config": case "config":
result_data, status = handleConfigRequest(endpoint) result, status = handleConfigRequest(endpoint)
case "controller": case "controller":
result_data, status = handleControllerRequest(endpoint, data) result, status = handleControllerRequest(endpoint, data)
case _: case _:
pass pass
except Exception as e: except Exception as e:
result_data = str(e) result = str(e)
status = 500 status = 500
printResponse(status, endpoint, result)
response = {
"status": status,
"endpoint": endpoint,
"result": result_data,
}
response = json.dumps(response)
with open('process.log', 'a') as f:
f.write(f"response: {response}\n")
print(response, flush=True)
if __name__ == "__main__": if __name__ == "__main__":
controller.init({ controller.init({
@@ -334,32 +313,18 @@ if __name__ == "__main__":
traceback.print_exc(file=f) traceback.print_exc(file=f)
case "test": case "test":
response_data, status = handleControllerRequest("/controller/callback_download_ctranslate2_weight") endpoint = "/controller/callback_download_ctranslate2_weight"
response = { result, status = handleControllerRequest(endpoint)
"status": status, printResponse(status, endpoint, result)
"endpoint": "/controller/callback_download_ctranslate2_weight", endpoint = "/controller/callback_download_whisper_weight"
"result": response_data, result, status = handleControllerRequest(endpoint)
} printResponse(status, endpoint, result)
response = json.dumps(response)
response_data, status = handleControllerRequest("/controller/callback_download_whisper_weight")
response = {
"status": status,
"endpoint": "/controller/callback_download_whisper_weight",
"result": response_data,
}
response = json.dumps(response)
case "test_all": case "test_all":
import time import time
for endpoint, value in config_mapping.items(): for endpoint, value in config_mapping.items():
response_data, status = handleConfigRequest(endpoint) result, status = handleConfigRequest(endpoint)
response = { printResponse(status, endpoint, result)
"status": status,
"endpoint": endpoint,
"result": response_data,
}
response = json.dumps(response)
print(response, flush=True)
time.sleep(0.1) time.sleep(0.1)
for endpoint, value in controller_mapping.items(): for endpoint, value in controller_mapping.items():
@@ -367,7 +332,7 @@ if __name__ == "__main__":
match endpoint: match endpoint:
case "/controller/callback_messagebox_send": case "/controller/callback_messagebox_send":
data = {"id":"123456", "message":encodeUtf8("テスト")} data = {"id":"123456", "message":"テスト"}
case "/controller/set_your_language_and_country": case "/controller/set_your_language_and_country":
data = {"language": "English", "country": "Hong Kong"} data = {"language": "English", "country": "Hong Kong"}
case "/controller/set_target_language_and_country": case "/controller/set_target_language_and_country":
@@ -451,12 +416,6 @@ if __name__ == "__main__":
case _: case _:
data = None data = None
response_data, status = handleControllerRequest(endpoint, data) result, status = handleControllerRequest(endpoint, data)
response = { printResponse(status, endpoint, result)
"status": status,
"endpoint": endpoint,
"result": response_data,
}
response = json.dumps(response)
print(response, flush=True)
time.sleep(0.5) time.sleep(0.5)

View File

@@ -7,14 +7,13 @@ import { useStdoutToPython } from "./useStdoutToPython";
export const useMessage = () => { export const useMessage = () => {
const { currentMessageLogsStatus, addMessageLogsStatus, updateMessageLogsStatus } = useMessageLogsStatus(); const { currentMessageLogsStatus, addMessageLogsStatus, updateMessageLogsStatus } = useMessageLogsStatus();
const { asyncStdoutToPython } = useStdoutToPython(); const { asyncStdoutToPython } = useStdoutToPython();
const encoder = new TextEncoder();
return { return {
sendMessage: (message) => { sendMessage: (message) => {
const uuid = crypto.randomUUID(); const uuid = crypto.randomUUID();
const send_message_object = { const send_message_object = {
id: uuid, id: uuid,
message: encoder.encode(message), message: message,
}; };
asyncStdoutToPython("/controller/callback_messagebox_send", send_message_object); asyncStdoutToPython("/controller/callback_messagebox_send", send_message_object);

View File

@@ -1,9 +1,10 @@
import { store } from "@store"; import { store } from "@store";
import { encode } from 'js-base64'
export const useStdoutToPython = () => { export const useStdoutToPython = () => {
const asyncStdoutToPython = async (path, value) => { const asyncStdoutToPython = async (path, value) => {
let send_object = { endpoint: path }; let send_object = { endpoint: path };
if (value) send_object.data = value; if (value) send_object.data = encode(JSON.stringify(value));
// send to python // send to python
const backend_subprocess = store.backend_subprocess; const backend_subprocess = store.backend_subprocess;