Spaces:
Paused
Paused
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() | |