branch: externals/ellama
commit 85e9d253c2799823a80f6383d6ec68ce6e530494
Author: Sergey Kostyaev <[email protected]>
Commit: Sergey Kostyaev <[email protected]>
Add function to remove reasoning and update name generation
Added a new function `ellama-remove-reasoning` to strip R1-like
reasoning from text. Updated `ellama-generate-name-by-llm` and added
`ellama-generate-name-by-reasoning-llm` to use this new function for
generating names based on LLM responses, ensuring the topic is
returned without additional words or formatting.
---
ellama.el | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/ellama.el b/ellama.el
index c544636ddd..066692a06e 100644
--- a/ellama.el
+++ b/ellama.el
@@ -220,6 +220,7 @@ PROMPT is a prompt string."
(const :tag "By first N words of prompt"
ellama-generate-name-by-words)
(const :tag "By current time" ellama-generate-name-by-time)
(const :tag "By generating name with LLM based on prompt."
ellama-generate-name-by-llm)
+ (const :tag "By generating name with reasoning LLM based on prompt."
ellama-generate-name-by-reasoning-llm)
(function :tag "By custom function")))
(defcustom ellama-define-word-prompt-template "Define %s"
@@ -329,7 +330,7 @@ Improved abc feature by adding new xyz module.
:group 'ellama
:type 'string)
-(defcustom ellama-get-name-template "I will get you user query, you should
return short topic only, what this conversation about. NEVER respond to query
itself. Topic must be short and concise.
+(defcustom ellama-get-name-template "I will get you user query, you should
return short topic only, what this conversation about. NEVER respond to query
itself. Topic must be short and concise. Do not add additional words like 'the
topic is', respond with topic only.
<example>
Query: Why is sky blue?
Topic: Blue sky
@@ -690,12 +691,28 @@ EXTRA contains additional information."
"\n")))
"\\.")))
+(defun ellama-remove-reasoning (text)
+ "Remove R1-like reasoning from TEXT."
+ (string-trim (replace-regexp-in-string
+ "<think>\\(.\\|\n\\)*</think>"
+ ""
+ text)))
+
(defun ellama-generate-name-by-llm (provider _action prompt)
"Generate name for ellama ACTION by PROVIDER and PROMPT by LLM."
(format "%s (%s)"
(ellama-get-name prompt)
(llm-name provider)))
+(defun ellama-generate-name-by-reasoning-llm (provider _action prompt)
+ "Generate name for ellama ACTION by PROVIDER and PROMPT by LLM."
+ (format "%s (%s)"
+ (ellama-remove-reasoning
+ (llm-chat (or ellama-naming-provider ellama-provider)
+ (llm-make-simple-chat-prompt
+ (format ellama-get-name-template prompt))))
+ (llm-name provider)))
+
(defun ellama-get-current-time ()
"Return string representation of current time."
(replace-regexp-in-string