diff options
| author | Martin Bielik <mx.bielik@gmail.com> | 2024-03-09 18:06:14 +0100 |
|---|---|---|
| committer | Martin Bielik <mx.bielik@gmail.com> | 2024-03-09 18:10:16 +0100 |
| commit | b0f7e3b8d92289d1a8086e3eed206f8b5757328b (patch) | |
| tree | de9d18ee5e5471467fe293e3059f2f138457331c /py | |
| parent | eb333e39e17d4d5240dbbc186a65bc6e9ab6b44e (diff) | |
| download | vim-ai-b0f7e3b8d92289d1a8086e3eed206f8b5757328b.tar.gz | |
read role prompt from config
Diffstat (limited to '')
| -rw-r--r-- | py/chat.py | 9 | ||||
| -rw-r--r-- | py/complete.py | 8 | ||||
| -rw-r--r-- | py/utils.py | 24 |
3 files changed, 36 insertions, 5 deletions
@@ -4,10 +4,13 @@ import vim plugin_root = vim.eval("s:plugin_root") vim.command(f"py3file {plugin_root}/py/utils.py") +prompt, role_options = parse_prompt_and_role(vim.eval("l:prompt")) config = normalize_config(vim.eval("l:config")) -config_options = config['options'] +config_options = { + **config['options'], + **role_options, +} config_ui = config['ui'] -prompt = vim.eval("l:prompt").strip() def initialize_chat_window(): lines = vim.eval('getline(1, "$")') @@ -72,7 +75,7 @@ try: **openai_options } printDebug("[chat] request: {}", request) - url = config_options['endpoint_url'] + url = options['endpoint_url'] response = openai_request(url, request, http_options) def map_chunk(resp): printDebug("[chat] response: {}", resp) diff --git a/py/complete.py b/py/complete.py index debe275..453ef46 100644 --- a/py/complete.py +++ b/py/complete.py @@ -6,11 +6,15 @@ vim.command(f"py3file {plugin_root}/py/utils.py") config = normalize_config(vim.eval("l:config")) engine = config['engine'] -config_options = config['options'] + +prompt, role_options = parse_prompt_and_role(vim.eval("l:prompt")) +config_options = { + **config['options'], + **role_options, +} openai_options = make_openai_options(config_options) http_options = make_http_options(config_options) -prompt = vim.eval("l:prompt").strip() is_selection = vim.eval("l:is_selection") def complete_engine(prompt): diff --git a/py/utils.py b/py/utils.py index 19de7c4..7a1a574 100644 --- a/py/utils.py +++ b/py/utils.py @@ -11,6 +11,7 @@ import re from urllib.error import URLError from urllib.error import HTTPError import traceback +import configparser is_debugging = vim.eval("g:vim_ai_debug") == "1" debug_log_file = vim.eval("g:vim_ai_debug_log_file") @@ -261,3 +262,26 @@ def handle_completion_error(error): def clear_echo_message(): # https://neovim.discourse.group/t/how-to-clear-the-echo-message-in-the-command-line/268/3 vim.command("call feedkeys(':','nx')") + +def load_role_config(role): + roles_config_path = os.path.expanduser('~/.vim/roles.ini') # TODO configure + roles = configparser.ConfigParser() + roles.read(roles_config_path) + if not role in roles: + raise KnownError(f"Role {role} not found") # TODO handle errors + return roles[role] + +def parse_prompt_and_role(raw_prompt): + prompt = raw_prompt.strip() + role = re.split(' |:', prompt)[0] + if not role.startswith('/'): + # does not require role + return (prompt, {}) + + prompt = prompt[len(role):].strip() + role = role[1:] + + role_config = load_role_config(role) + delim = '' if prompt.startswith(':') else ':\n' + prompt = role_config['prompt'] + delim + prompt + return (prompt, {}) |