diff --git a/public/index.html b/public/index.html index 5f8113b4e..819fe0b18 100644 --- a/public/index.html +++ b/public/index.html @@ -607,6 +607,15 @@ +
+
+ Gradio Streaming Function ID + + ? + +
+ +
diff --git a/public/notes/textgen_streaming.html b/public/notes/textgen_streaming.html new file mode 100644 index 000000000..ad0103f11 --- /dev/null +++ b/public/notes/textgen_streaming.html @@ -0,0 +1,28 @@ + + + + Gradio Streaming Function ID + + + + + + + + + +
+
+

+ To use streaming with Text Generation Web UI, a Gradio function index needs to be provided. + It is impossible to be determined programmatically and should be typed in manually. + If the streaming doesn't work with the default value, get the most recent function ID here: + GRADIO_FN +

+
+
+ + + \ No newline at end of file diff --git a/public/script.js b/public/script.js index 7fcb4f5c5..47c61895e 100644 --- a/public/script.js +++ b/public/script.js @@ -1244,8 +1244,8 @@ class StreamingProcessor { } try { - this.result = this.prefix + text; - this.onProgressStreaming(this.messageId, this.result); + this.result = text; + this.onProgressStreaming(this.messageId, message_already_generated + text); } catch (err) { console.error(err); @@ -1887,7 +1887,7 @@ async function Generate(type, automatic_trigger, force_name2) { } } else if (main_api == 'textgenerationwebui' && textgenerationwebui_settings.streaming) { - streamingProcessor.generator = await generateTextGenWithStreaming(generate_data, finalPromt); + streamingProcessor.generator = await generateTextGenWithStreaming(generate_data); } else { jQuery.ajax({ @@ -1919,6 +1919,8 @@ async function Generate(type, automatic_trigger, force_name2) { console.log('returning to make generate again'); return; } + + getMessage = message_already_generated; } if (streamingProcessor.isFinished) { diff --git a/public/scripts/textgen-settings.js b/public/scripts/textgen-settings.js index 4cd7965e6..9ee663ed4 100644 --- a/public/scripts/textgen-settings.js +++ b/public/scripts/textgen-settings.js @@ -30,6 +30,7 @@ let textgenerationwebui_settings = { truncation_length: 2048, ban_eos_token: false, streaming: false, + fn_index: 29, }; let textgenerationwebui_presets = []; @@ -52,6 +53,7 @@ const setting_names = [ "seed", "add_bos_token", "ban_eos_token", + "fn_index", ]; function selectPreset(name) { @@ -143,12 +145,13 @@ function setSettingByName(i, value, trigger) { } } -async function generateTextGenWithStreaming(generate_data, finalPromt) { +async function generateTextGenWithStreaming(generate_data) { const response = await fetch('/generate_textgenerationwebui', { headers: { 'X-CSRF-Token': token, 'Content-Type': 'application/json', 'X-Response-Streaming': true, + 'X-Gradio-Streaming-Function': textgenerationwebui_settings.fn_index, }, body: JSON.stringify(generate_data), method: 'POST', diff --git a/server.js b/server.js index d8d21dad9..01b7242cd 100644 --- a/server.js +++ b/server.js @@ -218,18 +218,15 @@ app.use('/characters', (req, res) => { res.status(404).send('File not found'); return; } - //res.contentType('image/jpeg'); res.send(data); }); }); app.use(multer({ dest: "uploads" }).single("avatar")); app.get("/", function (request, response) { response.sendFile(__dirname + "/public/index.html"); - //response.send("

Главная страница

"); }); app.get("/notes/*", function (request, response) { response.sendFile(__dirname + "/public" + request.url + ".html"); - //response.send("

Главная страница

"); }); //**************Kobold api @@ -319,16 +316,16 @@ function randomHash() { return result; } -function textGenProcessStartedHandler(websocket, content, session, prompt, SEND_PROMPT_GRADIO_FN) { +function textGenProcessStartedHandler(websocket, content, session, prompt, fn_index) { switch (content.msg) { case "send_hash": - const send_hash = JSON.stringify({ "session_hash": session, "fn_index": SEND_PROMPT_GRADIO_FN }); + const send_hash = JSON.stringify({ "session_hash": session, "fn_index": fn_index }); websocket.send(send_hash); break; case "estimation": break; case "send_data": - const send_data = JSON.stringify({ "session_hash": session, "fn_index": SEND_PROMPT_GRADIO_FN, "data": prompt.data }); + const send_data = JSON.stringify({ "session_hash": session, "fn_index": fn_index, "data": prompt.data }); console.log(send_data); websocket.send(send_data); break; @@ -350,7 +347,7 @@ app.post("/generate_textgenerationwebui", jsonParser, async function (request, r console.log(request.body); if (!!request.header('X-Response-Streaming')) { - const SEND_PARAMS_GRADIO_FN = 29; + const fn_index = Number(request.header('X-Gradio-Streaming-Function')); response_generate.writeHead(200, { 'Content-Type': 'text/plain;charset=utf-8', @@ -381,7 +378,7 @@ app.post("/generate_textgenerationwebui", jsonParser, async function (request, r websocket.on('message', async (message) => { const content = json5.parse(message); console.log(content); - text = textGenProcessStartedHandler(websocket, content, session, request.body, SEND_PARAMS_GRADIO_FN); + text = textGenProcessStartedHandler(websocket, content, session, request.body, fn_index); }); while (true) { @@ -450,38 +447,20 @@ app.post("/generate_textgenerationwebui", jsonParser, async function (request, r app.post("/savechat", jsonParser, function (request, response) { - //console.log(humanizedISO8601DateTime()+':/savechat/ entered'); - //console.log(request.data); - //console.log(request.body.bg); - //const data = request.body; - //console.log(request); - //console.log(request.body.chat); - //var bg = "body {background-image: linear-gradient(rgba(19,21,44,0.75), rgba(19,21,44,0.75)), url(../backgrounds/"+request.body.bg+");}"; var dir_name = String(request.body.avatar_url).replace('.png', ''); - //console.log(humanizedISO8601DateTime()+':/savechat sees '+dir_name+' as the character name (derived from avatar PNG filename)'); let chat_data = request.body.chat; let jsonlData = chat_data.map(JSON.stringify).join('\n'); - //console.log(humanizedISO8601DateTime()+':/savechat saving a chat named '+request.body.file_name+'.jsonl'); fs.writeFile(chatsPath + dir_name + "/" + request.body.file_name + '.jsonl', jsonlData, 'utf8', function (err) { if (err) { response.send(err); return console.log(err); - //response.send(err); } else { - //response.redirect("/"); response.send({ result: "ok" }); } }); }); app.post("/getchat", jsonParser, function (request, response) { - //console.log(request.data); - //console.log(request.body.bg); - //const data = request.body; - //console.log(request); - //console.log(request.body.chat); - //var bg = "body {background-image: linear-gradient(rgba(19,21,44,0.75), rgba(19,21,44,0.75)), url(../backgrounds/"+request.body.bg+");}"; - //console.log(humanizedISO8601DateTime()+':/getchat entered'); var dir_name = String(request.body.avatar_url).replace('.png', ''); fs.stat(chatsPath + dir_name, function (err, stat) { @@ -498,7 +477,6 @@ app.post("/getchat", jsonParser, function (request, response) { fs.stat(chatsPath + dir_name + "/" + request.body.file_name + ".jsonl", function (err, stat) { if (err === null) { //if no error (the file exists), read the file - //console.log(humanizedISO8601DateTime()+':/getchat tries to access: '+chatsPath+dir_name+'/'+request.body.file_name+'.jsonl'); if (stat !== undefined) { fs.readFile(chatsPath + dir_name + "/" + request.body.file_name + ".jsonl", 'utf8', (err, data) => { if (err) { @@ -574,10 +552,6 @@ app.post("/getstatus", jsonParser, function (request, response_getstatus = respo data.result = "no_connection"; } response_getstatus.send(data); - //console.log(response.statusCode); - //console.log(data); - //response_getstatus.send(data); - //data.results[0].text }).on('error', function (err) { //console.log(url); //console.log('something went wrong on the request', err.request.options); @@ -629,20 +603,15 @@ app.post("/setsoftprompt", jsonParser, async function (request, response) { }); function checkServer() { - //console.log('Check run###################################################'); api_server = 'http://127.0.0.1:5000'; var args = { headers: { "Content-Type": "application/json" } }; client.get(api_server + "/v1/model", args, function (data, response) { console.log(data.result); - //console.log('###################################################'); console.log(data); }).on('error', function (err) { console.log(err); - //console.log(''); - //console.log('something went wrong on the request', err.request.options); - //console.log('errorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr'); }); } @@ -688,10 +657,6 @@ app.post("/createcharacter", urlencodedParser, function (request, response) { response.send("Error: A character with that name already exists."); //response.send({error: true}); } - //console.log(request.body); - //response.send(request.body.ch_name); - - //response.redirect("https://metanit.com") }); @@ -892,11 +857,6 @@ app.post("/getcharacters", jsonParser, function (request, response) { //console.log(characters); response.send(JSON.stringify(characters)); }); - //var directories = getDirectories("public/characters"); - //console.log(directories[0]); - //characters = {}; - //character_i = 0; - //getCharacterFile(directories, response,0); }); app.post("/getbackgrounds", jsonParser, function (request, response) { @@ -918,11 +878,6 @@ app.post("/getuseravatars", jsonParser, function (request, response) { }); app.post("/setbackground", jsonParser, function (request, response) { - //console.log(request.data); - //console.log(request.body.bg); - //const data = request.body; - //console.log(request); - //console.log(1); var bg = "#bg1 {background-image: url(../backgrounds/" + request.body.bg + ");}"; fs.writeFile('public/css/bg_load.css', bg, 'utf8', function (err) { if (err) { @@ -1016,8 +971,6 @@ app.post("/downloadbackground", urlencodedParser, function (request, response) { }); app.post("/savesettings", jsonParser, function (request, response) { - - fs.writeFile('public/settings.json', JSON.stringify(request.body), 'utf8', function (err) { if (err) { response.send(err); @@ -1028,8 +981,8 @@ app.post("/savesettings", jsonParser, function (request, response) { response.send({ result: "ok" }); } }); - }); + app.post('/getsettings', jsonParser, (request, response) => { //Wintermute's code const koboldai_settings = []; const koboldai_setting_names = []; @@ -1238,34 +1191,6 @@ function readWorldInfoFile(worldInfoName) { return worldInfo; } -function getCharacterFile(directories, response, i) { //old need del - if (directories.length > i) { - - fs.stat(charactersPath + directories[i] + '/' + directories[i] + ".json", function (err, stat) { - if (err == null) { - fs.readFile(charactersPath + directories[i] + '/' + directories[i] + ".json", 'utf8', (err, data) => { - if (err) { - console.error(err); - return; - } - //console.log(data); - - characters[character_i] = {}; - characters[character_i] = data; - i++; - character_i++; - getCharacterFile(directories, response, i); - }); - } else { - i++; - getCharacterFile(directories, response, i); - } - }); - - } else { - response.send(JSON.stringify(characters)); - } -} function getImages(path) { return fs @@ -1277,17 +1202,6 @@ function getImages(path) { .sort(Intl.Collator().compare); } -function getKoboldSettingFiles(path) { - return fs.readdirSync(path).sort(function (a, b) { - return new Date(fs.statSync(path + '/' + a).mtime) - new Date(fs.statSync(path + '/' + b).mtime); - }).reverse(); -} -function getDirectories(path) { - return fs.readdirSync(path).sort(function (a, b) { - return new Date(fs.statSync(path + '/' + a).mtime) - new Date(fs.statSync(path + '/' + b).mtime); - }).reverse(); -} - //***********Novel.ai API app.post("/getstatus_novelai", jsonParser, function (request, response_getstatus_novel = response) { @@ -1320,8 +1234,6 @@ app.post("/getstatus_novelai", jsonParser, function (request, response_getstatus }); }); - - app.post("/generate_novelai", jsonParser, function (request, response_generate_novel = response) { if (!request.body) return response_generate_novel.sendStatus(400); @@ -1581,17 +1493,12 @@ app.post("/exportcharacter", jsonParser, async function (request, response) { app.post("/importchat", urlencodedParser, function (request, response) { - //console.log(humanizedISO8601DateTime()+':/importchat begun'); if (!request.body) return response.sendStatus(400); var format = request.body.file_type; let filedata = request.file; let avatar_url = (request.body.avatar_url).replace('.png', ''); let ch_name = request.body.character_name; - //console.log(filedata.filename); - //var format = request.body.file_type; - //console.log(format); - //console.log(1); if (filedata) { if (format === 'json') {