@@ -2545,13 +2545,26 @@ def noscript_webui(self):
25452545 reply = ""
25462546 status = str (parsed_dict ['status' ][0 ]) if 'status' in parsed_dict else "Ready To Generate"
25472547 prompt = str (parsed_dict ['prompt' ][0 ]) if 'prompt' in parsed_dict else ""
2548+ chatmsg = str (parsed_dict ['chatmsg' ][0 ]) if 'chatmsg' in parsed_dict else ""
25482549 max_length = int (parsed_dict ['max_length' ][0 ]) if 'max_length' in parsed_dict else 100
25492550 temperature = float (parsed_dict ['temperature' ][0 ]) if 'temperature' in parsed_dict else 0.75
25502551 top_k = int (parsed_dict ['top_k' ][0 ]) if 'top_k' in parsed_dict else 100
25512552 top_p = float (parsed_dict ['top_p' ][0 ]) if 'top_p' in parsed_dict else 0.9
25522553 rep_pen = float (parsed_dict ['rep_pen' ][0 ]) if 'rep_pen' in parsed_dict else 1.0
25532554 ban_eos_token = int (parsed_dict ['ban_eos_token' ][0 ]) if 'ban_eos_token' in parsed_dict else 0
2554- gencommand = (parsed_dict ['generate' ][0 ] if 'generate' in parsed_dict else "" )== "Generate"
2555+ genbtnval = (parsed_dict ['generate' ][0 ] if 'generate' in parsed_dict else "" )
2556+ gencommand = (genbtnval == "Generate" or genbtnval == "Send" )
2557+ chatmode = int (parsed_dict ['chatmode' ][0 ]) if 'chatmode' in parsed_dict else 0
2558+ stops = []
2559+ prefix = ""
2560+ if chatmode :
2561+ ban_eos_token = False
2562+ if chatmsg :
2563+ prompt += f"\n User: { chatmsg } \n Assistant:"
2564+ else :
2565+ gencommand = False
2566+ stops = ["\n User:" ,"\n Assistant:" ]
2567+ prefix = "[This is a chat conversation log between User and Assistant.]\n "
25552568
25562569 if modelbusy .locked ():
25572570 status = "Model is currently busy, try again later."
@@ -2565,23 +2578,41 @@ def noscript_webui(self):
25652578 epurl = f"{ httpsaffix } ://localhost:{ args .port } "
25662579 if args .host != "" :
25672580 epurl = f"{ httpsaffix } ://{ args .host } :{ args .port } "
2568- gen_payload = {"prompt" : prompt ,"max_length" : max_length ,"temperature" : temperature ,"top_k" : top_k ,"top_p" : top_p ,"rep_pen" : rep_pen ,"ban_eos_token" :ban_eos_token }
2581+ gen_payload = {"prompt" : prefix + prompt ,"max_length" : max_length ,"temperature" : temperature ,"top_k" : top_k ,"top_p" : top_p ,"rep_pen" : rep_pen ,"ban_eos_token" :ban_eos_token , "stop_sequence" : stops }
25692582 respjson = make_url_request (f'{ epurl } /api/v1/generate' , gen_payload )
25702583 reply = html .escape (respjson ["results" ][0 ]["text" ])
2584+ if chatmode :
2585+ reply = " " + reply .strip ()
25712586 status = "Generation Completed"
25722587
25732588 if "generate" in parsed_dict :
25742589 del parsed_dict ["generate" ]
2590+ if "chatmsg" in parsed_dict :
2591+ del parsed_dict ["chatmsg" ]
25752592 parsed_dict ["prompt" ] = prompt + reply
25762593 parsed_dict ["status" ] = status
2594+ parsed_dict ["chatmode" ] = ("1" if chatmode else "0" )
25772595 updated_query_string = urlparse .urlencode (parsed_dict , doseq = True )
25782596 updated_path = parsed_url ._replace (query = updated_query_string ).geturl ()
25792597 self .path = updated_path
2598+ time .sleep (0.2 ) #short delay
25802599 self .send_response (302 )
25812600 self .send_header ("location" , self .path )
25822601 self .end_headers (content_type = 'text/html' )
25832602 return
25842603
2604+ bodycontent = f'''<b>{ "Chat Mode" if chatmode else "Story Mode" } </b><br>'''
2605+ if chatmode :
2606+ tmp = prompt .strip ().replace ("\n " ,"<br>" )
2607+ bodycontent += f'''<p>{ "No History Yet. Talk to the AI." if prompt == "" else tmp } </p>
2608+ <label>Say: </label><input type="text" size="40" value="" name="chatmsg">
2609+ <input type="hidden" name="prompt" value="{ prompt } ">
2610+ <input type="submit" name="generate" value="Send"> (Be patient)'''
2611+ else :
2612+ bodycontent += f'''
2613+ <textarea name="prompt" cols="60" rows="8" wrap="soft" placeholder="Enter Prompt Here">{ prompt } </textarea><br>
2614+ <input type="submit" name="generate" value="Generate"> (Be patient)
2615+ '''
25852616 finalhtml = f'''<!doctype html>
25862617<html lang="en"><head>
25872618<meta charset="utf-8">
@@ -2592,8 +2623,7 @@ def noscript_webui(self):
25922623<p>KoboldCpp can be used without Javascript enabled, however this is not recommended.
25932624<br>If you have Javascript, please use <a href="/">KoboldAI Lite WebUI</a> instead.</p><hr>
25942625<form action="/noscript">
2595- Enter Prompt:<br>
2596- <textarea name="prompt" cols="60" rows="8" wrap="soft" placeholder="Enter Prompt Here">{ prompt } </textarea>
2626+ { bodycontent }
25972627<hr>
25982628<b>{ status } </b><br>
25992629<hr>
@@ -2603,12 +2633,19 @@ def noscript_webui(self):
26032633<label>Top-P</label> <input type="text" size="4" value="{ top_p } " name="top_p"><br>
26042634<label>Rep. Pen</label> <input type="text" size="4" value="{ rep_pen } " name="rep_pen"><br>
26052635<label>Prevent EOS</label> <input type="checkbox" name="ban_eos_token" value="1" { "checked" if ban_eos_token else "" } ><br>
2606- <input type="submit " name="generate " value="Generate"> (Please be patient)
2636+ <input type="hidden " name="chatmode " value="{ chatmode } ">
26072637</form>
2608- <form action="/noscript">
2609- <input type="submit" value="Reset">
2638+ <hr>
2639+ <div style="display: inline-block;">
2640+ <form action="/noscript" style="display: inline;">
2641+ <input type="submit" value="Reset (Story Mode)">
2642+ </form>
2643+ <form action="/noscript" style="display: inline;">
2644+ <input type="hidden" name="chatmode" value="1">
2645+ <input type="submit" value="Reset (Chat Mode)">
26102646</form>
26112647</div>
2648+ </div>
26122649</body></html>'''
26132650 finalhtml = finalhtml .encode ('utf-8' )
26142651 self .send_response (200 )
@@ -6173,10 +6210,12 @@ def kcpp_main_process(launch_args, g_memory=None, gui_launcher=False):
61736210 with open (os .path .join (basepath , "klite.embd" ), mode = 'rb' ) as f :
61746211 embedded_kailite = f .read ()
61756212 # patch it with extra stuff
6176- origStr = "Sorry, KoboldAI Lite requires Javascript to function."
6177- patchedStr = "Sorry, KoboldAI Lite requires Javascript to function.<br>You can use <a class=\" color_blueurl\" href=\" /noscript\" >KoboldCpp NoScript mode</a> instead."
6213+ patches = [{"find" :"Sorry, KoboldAI Lite requires Javascript to function." ,"replace" :"Sorry, KoboldAI Lite requires Javascript to function.<br>You can use <a class=\" color_blueurl\" href=\" /noscript\" >KoboldCpp NoScript mode</a> instead." },
6214+ {"find" :"var localflag = urlParams.get('local');" ,"replace" :"var localflag = true;" },
6215+ {"find" :"<p id=\" tempgtloadtxt\" >Loading...</p>" ,"replace" :"<p id=\" tempgtloadtxt\" >Loading...<br>(If load fails, try <a class=\" color_blueurl\" href=\" /noscript\" >KoboldCpp NoScript mode</a> instead.)</p>" }]
61786216 embedded_kailite = embedded_kailite .decode ("UTF-8" ,"ignore" )
6179- embedded_kailite = embedded_kailite .replace (origStr , patchedStr )
6217+ for p in patches :
6218+ embedded_kailite = embedded_kailite .replace (p ["find" ], p ["replace" ])
61806219 embedded_kailite = embedded_kailite .encode ()
61816220 print ("Embedded KoboldAI Lite loaded." )
61826221 except Exception :
0 commit comments