summaryrefslogtreecommitdiff
path: root/py/chat.py
diff options
context:
space:
mode:
authorMartin Bielik <mx.bielik@gmail.com>2023-04-10 10:31:46 +0200
committerMartin Bielik <mx.bielik@gmail.com>2023-04-10 10:31:46 +0200
commitf8323fe373f0470010a289c3fb1b350a5972cfda (patch)
tree3265e36222bb015dda80df7096e6cb0bc064c51c /py/chat.py
parente7a16f5484b74e49dc51a4a0db81566565eae105 (diff)
downloadvim-ai-f8323fe373f0470010a289c3fb1b350a5972cfda.tar.gz
populate options in chat
Diffstat (limited to '')
-rw-r--r--py/chat.py85
1 files changed, 54 insertions, 31 deletions
diff --git a/py/chat.py b/py/chat.py
index 5714e63..2983701 100644
--- a/py/chat.py
+++ b/py/chat.py
@@ -4,41 +4,64 @@ import openai
plugin_root = vim.eval("s:plugin_root")
vim.command(f"py3file {plugin_root}/py/utils.py")
+config_options = vim.eval("options")
+config_ui = vim.eval("ui")
+
openai.api_key = load_api_key()
-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! ggO>>> user\n")
- vim.command("normal! G")
- vim.command("let &ul=&ul") # breaks undo sequence (https://vi.stackexchange.com/a/29087)
- vim.command("redraw")
-
-options_chat = {}
-lines = vim.eval('getline(1, "$")')
-contains_chat_options = '[chat-options]' in lines
-if contains_chat_options:
- # parse options that are defined in the chat header
- options_index = lines.index('[chat-options]')
- for line in lines[options_index + 1:]:
- if line.startswith('#'):
- # ignore comments
- continue
- if line.strip() == '':
- # stop at the end of the region
- break
- (key, value) = line.split('=')
- options_chat[key.strip()] = value.strip()
-
-options = make_options(options_chat)
+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")
+
+def parse_chat_header_options():
+ options = {}
+ lines = vim.eval('getline(1, "$")')
+ contains_chat_options = '[chat-options]' in lines
+ if contains_chat_options:
+ # parse options that are defined in the chat header
+ options_index = lines.index('[chat-options]')
+ for line in lines[options_index + 1:]:
+ if line.startswith('#'):
+ # ignore comments
+ continue
+ if line == '':
+ # stop at the end of the region
+ break
+ (key, value) = line.strip().split('=')
+ if key == 'initial_prompt':
+ value = value.split('\\n')
+ options[key] = value
+ return options
+
+initialize_chat_window()
+
+chat_options = parse_chat_header_options()
+options = {**config_options, **chat_options}
request_options = make_request_options(options)
-initial_prompt = options.get('initial_prompt', [])
-initial_prompt = '\n'.join(initial_prompt)
-file_content = vim.eval('trim(join(getline(1, "$"), "\n"))')
-chat_content = f"{initial_prompt}\n{file_content}"
-messages = parse_chat_messages(chat_content)
+initial_prompt = '\n'.join(options.get('initial_prompt', []))
+initial_messages = parse_chat_messages(initial_prompt)
+
+chat_content = vim.eval('trim(join(getline(1, "$"), "\n"))')
+chat_messages = parse_chat_messages(chat_content)
+
+messages = initial_messages + chat_messages
try:
if messages[-1]["content"].strip():