branch: externals/ellama commit d1ce220547bc8e0604aba4e9de579198bfc421af Author: Sergey Kostyaev <sskosty...@gmail.com> Commit: Sergey Kostyaev <sskosty...@gmail.com>
Refactor session context handling Refactored the way session context is handled by removing `ellama--new-session-context` and using `ellama--global-context` consistently. This change simplifies the code and ensures that the context is managed more uniformly across different functions. Additionally, updated `ellama--prompt-with-context` to only add context if it exists. --- ellama.el | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/ellama.el b/ellama.el index 9ffa8a5e7c..b95d32a229 100644 --- a/ellama.el +++ b/ellama.el @@ -739,8 +739,6 @@ EXTRA contains additional information." "Generate name for ellama ACTION by PROVIDER according to PROMPT." (ellama--fix-file-name (funcall ellama-naming-scheme provider action prompt))) -(defvar ellama--new-session-context nil) - (defun ellama-get-nick-prefix-for-mode () "Return preferred header prefix char based om the current mode. Defaults to #, but supports `org-mode'. Depends on `ellama-major-mode'." @@ -780,15 +778,14 @@ If EPHEMERAL non nil new session will not be associated with any file." ellama--current-session))) (session (make-ellama-session :id id :provider provider :file file-name - :context (if previous-session - (ellama-session-context previous-session) - ellama--new-session-context))) + :context (or (when previous-session + (ellama-session-context previous-session)) + ellama--global-context))) (buffer (if file-name (progn (make-directory ellama-sessions-directory t) (find-file-noselect file-name)) (get-buffer-create id)))) - (setq ellama--new-session-context nil) (setq ellama--current-session-id id) (puthash id buffer ellama--active-sessions) (with-current-buffer buffer @@ -916,9 +913,8 @@ If EPHEMERAL non nil new session will not be associated with any file." :provider (ellama-session-provider session) :file (ellama-session-file session) :prompt (ellama-session-prompt session) - :context ellama--new-session-context + :context ellama--global-context :extra extra))) - (setq ellama--new-session-context nil) (setq ellama--current-session-id (ellama-session-id ellama--current-session)) (puthash (ellama-session-id ellama--current-session) buffer ellama--active-sessions) @@ -1052,8 +1048,7 @@ If EPHEMERAL non nil new session will not be associated with any file." (if-let* ((id ellama--current-session-id) (session (with-current-buffer (ellama-get-session-buffer id) ellama--current-session))) - (push element (ellama-session-context session)) - (push element ellama--new-session-context)) + (push element (ellama-session-context session))) (push element ellama--global-context) (get-buffer-create ellama--context-buffer t) (with-current-buffer ellama--context-buffer @@ -1524,15 +1519,17 @@ If EPHEMERAL non nil new session will not be associated with any file." (defun ellama--prompt-with-context (prompt) "Add context to PROMPT for sending to llm." (let* ((session ellama--current-session) - (context (if session - (ellama-session-context session) - ellama--global-context))) - (concat (string-join - (cons "Context:" - (mapcar #'ellama-context-element-extract context)) - "\n") - "\n\n" - prompt))) + (context (or (when session + (ellama-session-context session)) + ellama--global-context))) + (if context + (concat (string-join + (cons "Context:" + (mapcar #'ellama-context-element-extract context)) + "\n") + "\n\n" + prompt) + prompt))) (defun ellama-chat-buffer-p (buffer) "Return non-nil if BUFFER is an ellama chat buffer."