oneliner / olapp.py
CoruNethron's picture
Update olapp.py
2490241 verified
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse, parse_qs
from llama_cpp import Llama
SYSTEM_PROMPT = "Ты — русскоязычный автоматический ассистент и профессиональный редактор. Ты выполняешь указания пользователя в точности, соблюдая все детали задания. Ты хорошо умеешь обобщать текст, выделяя только основной смысл."
def get_message_tokens(llm, role, content):
content = f"{role}\n{content}\n</s>"
content = content.encode("utf-8")
message_tokens = llm.tokenize(content, special=True)
return message_tokens
def get_system_tokens(llm):
system_message = {
"role": "system",
"content": SYSTEM_PROMPT
}
return get_message_tokens(llm, **system_message)
llm = Llama(model_path="/home/oluser/olapp/model-q4_K.gguf", n_ctx=2048, n_parts=1)
system_tokens = get_system_tokens(llm)
class OlHandler(BaseHTTPRequestHandler):
def do_GET(self):
query_components = parse_qs(urlparse(self.path).query)
q = query_components["q"][0]
tokens = system_tokens
llm.eval(tokens)
# TODO: add few shot
message_tokens = get_message_tokens(llm=llm, role="user",
content="Напиши краткое изложение текста, представленного ниже, в одном предложении.\nПредложение должно быть лаконичным о отражать основной смысл события или новости.\n\n" + q )
role_tokens = llm.tokenize("bot\n".encode("utf-8"), special=True)
tokens += message_tokens + role_tokens
# full_prompt = llm.detokenize(tokens)
generator = llm.generate(
tokens,
top_k=30,
top_p=.9,
temp=.2,
repeat_penalty=1.21
)
answ = ""
self.send_response(200)
self.send_header('Content-type','text/plain; charset=utf-8')
self.end_headers()
for tok in generator:
token_str = llm.detokenize([tok]).decode("utf-8", errors="ignore")
tokens.append(tok)
if tok == llm.token_eos():
break
#self.wfile.write(token_str.encode('utf-8'))
answ += token_str
#print(token_str, end="", flush=True)
#output = llm.create_completion(
# q,
# max_tokens=32,
# echo=False
#)["choices"][0]["text"]
#self.wfile.write(output.encode('utf-8'))
self.wfile.write(answ.encode('utf-8'))
return
if __name__ == '__main__':
olserver = HTTPServer(('0.0.0.0', 7860), OlHandler)
print('Starting server at http://0.0.0.0:7860')
olserver.serve_forever()