From 3b04fa1b764129395f54ab1b1297a4ce45e4105e Mon Sep 17 00:00:00 2001 From: Martin Bielik Date: Sun, 2 Apr 2023 23:05:12 +0200 Subject: extending config programatically --- py/utils.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'py') diff --git a/py/utils.py b/py/utils.py index 8366eec..814a4f0 100644 --- a/py/utils.py +++ b/py/utils.py @@ -12,9 +12,7 @@ def load_api_key(): return api_key.strip() def make_options(): - options_default = vim.eval("options_default") - options_user = vim.eval("options") - options = {**options_default, **options_user} + options = {**vim.eval("options")} options['request_timeout'] = float(options['request_timeout']) options['temperature'] = float(options['temperature']) options['max_tokens'] = int(options['max_tokens']) -- cgit v1.2.3 From 4029d16d1fb58e56b7eb67bb037e9644838fef24 Mon Sep 17 00:00:00 2001 From: Martin Bielik Date: Mon, 3 Apr 2023 00:25:59 +0200 Subject: trim newlines from the prompt, fixes #5 --- py/chat.py | 4 ++++ py/complete.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'py') diff --git a/py/chat.py b/py/chat.py index 0104014..f8345b4 100644 --- a/py/chat.py +++ b/py/chat.py @@ -30,6 +30,10 @@ if not messages: file_content = ">>> user\n\n" + file_content messages.append({"role": "user", "content": file_content }) +for message in messages: + # strip newlines from the content as it causes empty responses + message["content"] = message["content"].strip() + try: if messages[-1]["content"].strip(): vim.command("normal! Go\n<<< assistant\n\n") diff --git a/py/complete.py b/py/complete.py index e474580..14667b0 100644 --- a/py/complete.py +++ b/py/complete.py @@ -4,13 +4,13 @@ import openai plugin_root = vim.eval("s:plugin_root") vim.command(f"py3file {plugin_root}/py/utils.py") -prompt = vim.eval("prompt") +prompt = vim.eval("prompt").strip() options = make_options() openai.api_key = load_api_key() try: - if prompt.strip(): + if prompt: print('Completing...') vim.command("redraw") -- cgit v1.2.3 From 8b738e33887e9cf956aeb3db2fe28c7f5069a643 Mon Sep 17 00:00:00 2001 From: Martin Bielik Date: Mon, 3 Apr 2023 20:14:48 +0200 Subject: handle roles in python --- py/chat.py | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) (limited to 'py') diff --git a/py/chat.py b/py/chat.py index f8345b4..6b5ed67 100644 --- a/py/chat.py +++ b/py/chat.py @@ -5,30 +5,36 @@ plugin_root = vim.eval("s:plugin_root") vim.command(f"py3file {plugin_root}/py/utils.py") options = make_options() -file_content = vim.eval('trim(join(getline(1, "$"), "\n"))') openai.api_key = load_api_key() -lines = file_content.splitlines() -messages = [] - -for line in lines: - if line.startswith(">>> system"): - messages.append({"role": "system", "content": ""}) - continue - if line.startswith(">>> user"): - messages.append({"role": "user", "content": ""}) - continue - if line.startswith("<<< assistant"): - messages.append({"role": "assistant", "content": ""}) - continue - if not messages: - continue - messages[-1]["content"] += "\n" + line +def parse_messages(): + file_content = vim.eval('trim(join(getline(1, "$"), "\n"))') + lines = file_content.splitlines() + messages = [] + for line in lines: + if line.startswith(">>> system"): + messages.append({"role": "system", "content": ""}) + continue + if line.startswith(">>> user"): + messages.append({"role": "user", "content": ""}) + continue + if line.startswith("<<< assistant"): + messages.append({"role": "assistant", "content": ""}) + continue + if not messages: + continue + messages[-1]["content"] += "\n" + line + return messages + +messages = parse_messages() if not messages: - file_content = ">>> user\n\n" + file_content - messages.append({"role": "user", "content": file_content }) + # roles not found, put whole file content as an user prompt + vim.command("normal! ggO>>> user\n") + vim.command("normal! G") + vim.command("redraw") + messages = parse_messages() for message in messages: # strip newlines from the content as it causes empty responses -- cgit v1.2.3 From 95d1df263e27a06d3bc6f50f345c79ca0a3cc0b7 Mon Sep 17 00:00:00 2001 From: Martin Bielik Date: Mon, 3 Apr 2023 20:36:54 +0200 Subject: break undo sequence after initial prompt --- py/chat.py | 1 + 1 file changed, 1 insertion(+) (limited to 'py') diff --git a/py/chat.py b/py/chat.py index 6b5ed67..7614fb5 100644 --- a/py/chat.py +++ b/py/chat.py @@ -33,6 +33,7 @@ if not messages: # roles not found, put whole file content as an user prompt vim.command("normal! ggO>>> user\n") vim.command("normal! G") + vim.command("let &ul=&ul") # breaks undo sequence (https://vi.stackexchange.com/a/29087) vim.command("redraw") messages = parse_messages() -- cgit v1.2.3