summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/chat.py3
-rw-r--r--py/complete.py3
-rw-r--r--py/utils.py28
3 files changed, 27 insertions, 7 deletions
diff --git a/py/chat.py b/py/chat.py
index 85adfec..f996800 100644
--- a/py/chat.py
+++ b/py/chat.py
@@ -8,7 +8,8 @@ prompt, role_options = parse_prompt_and_role(vim.eval("l:prompt"))
config = normalize_config(vim.eval("l:config"))
config_options = {
**config['options'],
- **role_options,
+ **role_options['options_default'],
+ **role_options['options_chat'],
}
config_ui = config['ui']
diff --git a/py/complete.py b/py/complete.py
index 453ef46..f340e96 100644
--- a/py/complete.py
+++ b/py/complete.py
@@ -10,7 +10,8 @@ engine = config['engine']
prompt, role_options = parse_prompt_and_role(vim.eval("l:prompt"))
config_options = {
**config['options'],
- **role_options,
+ **role_options['options_default'],
+ **role_options['options_complete'],
}
openai_options = make_openai_options(config_options)
http_options = make_http_options(config_options)
diff --git a/py/utils.py b/py/utils.py
index 7a1a574..52e538d 100644
--- a/py/utils.py
+++ b/py/utils.py
@@ -269,19 +269,37 @@ def load_role_config(role):
roles.read(roles_config_path)
if not role in roles:
raise KnownError(f"Role {role} not found") # TODO handle errors
- return roles[role]
+
+ options = roles[f"{role}.options"] if f"{role}.options" in roles else {}
+ options_complete =roles[f"{role}.options-complete"] if f"{role}.options-complete" in roles else {}
+ options_chat = roles[f"{role}.options-chat"] if f"{role}.options-chat" in roles else {}
+
+ return {
+ 'role': dict(roles[role]),
+ 'options': {
+ 'options_default': dict(options),
+ 'options_complete': dict(options_complete),
+ 'options_chat': dict(options_chat),
+ },
+ }
+
+empty_role_options = {
+ 'options_default': {},
+ 'options_complete': {},
+ 'options_chat': {},
+}
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, {})
+ return (prompt, empty_role_options)
prompt = prompt[len(role):].strip()
role = role[1:]
- role_config = load_role_config(role)
+ config = load_role_config(role)
delim = '' if prompt.startswith(':') else ':\n'
- prompt = role_config['prompt'] + delim + prompt
- return (prompt, {})
+ prompt = config['role']['prompt'] + delim + prompt
+ return (prompt, config['options'])