summaryrefslogtreecommitdiff
path: root/py/chat.py
diff options
context:
space:
mode:
authorMartin Bielik <martin.bielik@instea.sk>2024-12-15 23:32:55 +0100
committerMartin Bielik <martin.bielik@instea.sk>2024-12-16 00:08:23 +0100
commitcb2ac5f7a672faeb7b81886b6c1f1481ef51f90d (patch)
tree12a9045749c3468e57555a13320871937bbb54e7 /py/chat.py
parentf26bee941bf9e5a5452ee0d75e7f2f2ea3c5216a (diff)
downloadvim-ai-cb2ac5f7a672faeb7b81886b6c1f1481ef51f90d.tar.gz
refactoring: import python when needed, run as functions
Diffstat (limited to '')
-rw-r--r--py/chat.py118
1 files changed, 58 insertions, 60 deletions
diff --git a/py/chat.py b/py/chat.py
index 9dd4d4e..79457ee 100644
--- a/py/chat.py
+++ b/py/chat.py
@@ -1,76 +1,74 @@
import vim
-# import utils
-plugin_root = vim.eval("s:plugin_root")
-vim.command(f"py3file {plugin_root}/py/utils.py")
+chat_py_imported = True
-prompt = vim.eval("l:prompt")
-config = make_config(vim.eval("l:config"))
-config_options = config['options']
-config_ui = config['ui']
+def run_ai_chat(context):
+ prompt = context['prompt']
+ config = make_config(context['config'])
+ config_options = config['options']
+ config_ui = config['ui']
-def initialize_chat_window():
- lines = vim.eval('getline(1, "$")')
- contains_user_prompt = '>>> user' in lines
- if not contains_user_prompt:
- # user role not found, put whole file content as an user prompt
- vim.command("normal! gg")
- populates_options = config_ui['populate_options'] == '1'
- if populates_options:
- vim.command("normal! O[chat-options]")
- vim.command("normal! o")
- for key, value in config_options.items():
- if key == 'initial_prompt':
- value = "\\n".join(value)
- vim.command("normal! i" + key + "=" + value + "\n")
- vim.command("normal! " + ("o" if populates_options else "O"))
- vim.command("normal! i>>> user\n")
-
- vim.command("normal! G")
- vim_break_undo_sequence()
- vim.command("redraw")
-
- file_content = vim.eval('trim(join(getline(1, "$"), "\n"))')
- role_lines = re.findall(r'(^>>> user|^>>> system|^<<< assistant).*', file_content, flags=re.MULTILINE)
- if not role_lines[-1].startswith(">>> user"):
- # last role is not user, most likely completion was cancelled before
- vim.command("normal! o")
- vim.command("normal! i\n>>> user\n\n")
+ def initialize_chat_window():
+ lines = vim.eval('getline(1, "$")')
+ contains_user_prompt = '>>> user' in lines
+ if not contains_user_prompt:
+ # user role not found, put whole file content as an user prompt
+ vim.command("normal! gg")
+ populates_options = config_ui['populate_options'] == '1'
+ if populates_options:
+ vim.command("normal! O[chat-options]")
+ vim.command("normal! o")
+ for key, value in config_options.items():
+ if key == 'initial_prompt':
+ value = "\\n".join(value)
+ vim.command("normal! i" + key + "=" + value + "\n")
+ vim.command("normal! " + ("o" if populates_options else "O"))
+ vim.command("normal! i>>> user\n")
- if prompt:
- vim.command("normal! i" + prompt)
+ vim.command("normal! G")
vim_break_undo_sequence()
vim.command("redraw")
-initialize_chat_window()
+ file_content = vim.eval('trim(join(getline(1, "$"), "\n"))')
+ role_lines = re.findall(r'(^>>> user|^>>> system|^<<< assistant).*', file_content, flags=re.MULTILINE)
+ if not role_lines[-1].startswith(">>> user"):
+ # last role is not user, most likely completion was cancelled before
+ vim.command("normal! o")
+ vim.command("normal! i\n>>> user\n\n")
-chat_options = parse_chat_header_options()
-options = {**config_options, **chat_options}
+ if prompt:
+ vim.command("normal! i" + prompt)
+ vim_break_undo_sequence()
+ vim.command("redraw")
-initial_prompt = '\n'.join(options.get('initial_prompt', []))
-initial_messages = parse_chat_messages(initial_prompt)
+ initialize_chat_window()
-chat_content = vim.eval('trim(join(getline(1, "$"), "\n"))')
-printDebug("[chat] text:\n" + chat_content)
-chat_messages = parse_chat_messages(chat_content)
-is_selection = vim.eval("l:is_selection")
+ chat_options = parse_chat_header_options()
+ options = {**config_options, **chat_options}
-messages = initial_messages + chat_messages
+ initial_prompt = '\n'.join(options.get('initial_prompt', []))
+ initial_messages = parse_chat_messages(initial_prompt)
-try:
- if messages[-1]["content"].strip():
- vim.command("normal! Go\n<<< assistant\n\n")
- vim.command("redraw")
+ chat_content = vim.eval('trim(join(getline(1, "$"), "\n"))')
+ print_debug("[chat] text:\n" + chat_content)
+ chat_messages = parse_chat_messages(chat_content)
- print('Answering...')
- vim.command("redraw")
+ messages = initial_messages + chat_messages
- text_chunks = make_chat_text_chunks(messages, options)
- render_text_chunks(text_chunks, is_selection)
+ try:
+ if messages[-1]["content"].strip():
+ vim.command("normal! Go\n<<< assistant\n\n")
+ vim.command("redraw")
- vim.command("normal! a\n\n>>> user\n\n")
- vim.command("redraw")
- clear_echo_message()
-except BaseException as error:
- handle_completion_error(error)
- printDebug("[chat] error: {}", traceback.format_exc())
+ print('Answering...')
+ vim.command("redraw")
+
+ text_chunks = make_chat_text_chunks(messages, options)
+ render_text_chunks(text_chunks)
+
+ vim.command("normal! a\n\n>>> user\n\n")
+ vim.command("redraw")
+ clear_echo_message()
+ except BaseException as error:
+ handle_completion_error(error)
+ print_debug("[chat] error: {}", traceback.format_exc())