branch: externals/ellama
commit 76b8287006dc7f97a5b60e258c79847dc1e87b16
Merge: 1fd599f3a7 2063c412db
Author: Sergey Kostyaev <[email protected]>
Commit: GitHub <[email protected]>
Merge pull request #221 from s-kostyaev/add-system-message
Add system message
---
NEWS.org | 6 ++++++
ellama.el | 25 ++++++++++++++++++++-----
2 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/NEWS.org b/NEWS.org
index f1535d5721..00d30a1822 100644
--- a/NEWS.org
+++ b/NEWS.org
@@ -1,3 +1,9 @@
+* Version 1.1.6
+- Add system message support to ~ellama-stream~, ~ellama-chat~ and
+ ~ellama-instant~.
+- Fix think tag handling for some models.
+- Provide buffer to all ~kill-buffer~ calls. Tried to fix an
+ unreproducible in my environment bug.
* Version 1.1.5
- Fix cancel current stream by pressing ~C-g~ in buffer with active
streaming.
diff --git a/ellama.el b/ellama.el
index 6e8a6321ac..2b3c258f5d 100644
--- a/ellama.el
+++ b/ellama.el
@@ -6,7 +6,7 @@
;; URL: http://github.com/s-kostyaev/ellama
;; Keywords: help local tools
;; Package-Requires: ((emacs "28.1") (llm "0.22.0") (spinner "1.7.4")
(transient "0.7") (compat "29.1") (posframe "1.4.0"))
-;; Version: 1.1.5
+;; Version: 1.1.6
;; SPDX-License-Identifier: GPL-3.0-or-later
;; Created: 8th Oct 2023
@@ -629,7 +629,7 @@ Skip code blocks and math environments."
(ellama--apply-transformations prev-point (point-max)))
(prog1
(buffer-substring-no-properties (point-min) (point-max))
- (kill-buffer))))
+ (kill-buffer (current-buffer)))))
(defun ellama--translate-markdown-to-org-filter (text)
"Filter to translate code blocks from markdown syntax to org syntax in TEXT.
@@ -644,7 +644,7 @@ This filter contains only subset of markdown syntax to be
good enough."
(replace-regexp-in-string "^[[:space:]]*```" "#+END_SRC\n")
(replace-regexp-in-string "```" "\n#+END_SRC\n")
(replace-regexp-in-string "<think>[\n]?" "#+BEGIN_QUOTE\n")
- (replace-regexp-in-string "</think>[\n]?" "#+END_QUOTE\n")
+ (replace-regexp-in-string "[\n]?</think>[\n]?" "\n#+END_QUOTE\n")
(ellama--replace-bad-code-blocks)
(ellama--replace-outside-of-code-blocks)))
@@ -1694,6 +1694,8 @@ strings before they're inserted into the BUFFER.
:ephemeral-session BOOL -- if BOOL is set session will not be saved to named
file by default.
+:system STR -- send STR to model as system message.
+
:on-error ON-ERROR -- ON-ERROR a function that's called with an error message
on
failure (with BUFFER current).
@@ -1719,15 +1721,20 @@ failure (with BUFFER current).
(error "Error calling the LLM: %s" msg))))
(donecb (or (plist-get args :on-done) #'ignore))
(prompt-with-ctx (ellama--prompt-with-context prompt))
+ (system (plist-get args :system))
(llm-prompt (if session
(if (llm-chat-prompt-p (ellama-session-prompt session))
(progn
(llm-chat-prompt-append-response
(ellama-session-prompt session)
prompt-with-ctx)
+ (when system
+ (llm-chat-prompt-append-response
+ (ellama-session-prompt session)
+ system 'system))
(ellama-session-prompt session))
(setf (ellama-session-prompt session)
- (llm-make-simple-chat-prompt prompt-with-ctx)))
+ (llm-make-chat-prompt prompt-with-ctx :context
system)))
(llm-make-simple-chat-prompt prompt-with-ctx))))
(with-current-buffer buffer
(ellama-request-mode +1)
@@ -1944,7 +1951,7 @@ Extract profession from this message. Be short and
concise."
(with-current-buffer buf
(prog1
(string-trim (buffer-substring-no-properties (point-min) (point-max)))
- (kill-buffer)))))
+ (kill-buffer buf)))))
(defun ellama-get-last-user-message ()
"Return last not sent user message in current session buffer."
@@ -2044,6 +2051,8 @@ ARGS contains keys for fine control.
:session-id ID -- ID is a ellama session unique identifier.
+:system STR -- send STR to model as system message.
+
:on-done ON-DONE -- ON-DONE a function that's called with
the full response text when the request completes (with BUFFER current)."
(interactive "sAsk ellama: ")
@@ -2055,6 +2064,7 @@ the full response text when the request completes (with
BUFFER current)."
'("ollama model" .
(ellama-get-ollama-local-model))))
ellama-providers))
(variants (mapcar #'car providers))
+ (system (plist-get args :system))
(donecb (plist-get args :on-done))
(provider (if current-prefix-arg
(eval (alist-get
@@ -2106,6 +2116,7 @@ the full response text when the request completes (with
BUFFER current)."
(ellama-get-nick-prefix-for-mode) " " ellama-assistant-nick
":\n"))
(ellama-stream prompt
:session session
+ :system system
:on-done (if donecb (list 'ellama-chat-done donecb)
'ellama-chat-done)
:filter (when (derived-mode-p 'org-mode)
@@ -2244,6 +2255,8 @@ ARGS contains keys for fine control.
:provider PROVIDER -- PROVIDER is an llm provider for generation.
+:system STR -- send STR to model as system message.
+
:on-done ON-DONE -- ON-DONE a function or list of functions that's called with
the full response text when the request completes (with BUFFER current)."
(let* ((provider (or (plist-get args :provider)
@@ -2252,6 +2265,7 @@ ARGS contains keys for fine control.
(buffer (get-buffer-create (if (get-buffer buffer-name)
(make-temp-name (concat buffer-name "
"))
buffer-name)))
+ (system (plist-get args :system))
(donecb (plist-get args :on-done))
filter)
(with-current-buffer buffer
@@ -2261,6 +2275,7 @@ ARGS contains keys for fine control.
(display-buffer buffer (when ellama-instant-display-action-function
`((ignore .
(,ellama-instant-display-action-function)))))
(ellama-stream prompt
+ :system system
:buffer buffer
:filter filter
:provider provider