[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/elisa af9da0b561 68/98: Refactor prompt rewriting
From: |
ELPA Syncer |
Subject: |
[elpa] externals/elisa af9da0b561 68/98: Refactor prompt rewriting |
Date: |
Wed, 17 Jul 2024 18:58:05 -0400 (EDT) |
branch: externals/elisa
commit af9da0b56155ee29eaf01e95e982e58476b5df24
Author: Sergey Kostyaev <kostyaev.sergey2@wb.ru>
Commit: Sergey Kostyaev <kostyaev.sergey2@wb.ru>
Refactor prompt rewriting
---
elisa.el | 51 ++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 46 insertions(+), 5 deletions(-)
diff --git a/elisa.el b/elisa.el
index 1fe82dd6ea..07c6f29b34 100644
--- a/elisa.el
+++ b/elisa.el
@@ -5,7 +5,7 @@
;; Author: Sergey Kostyaev <sskostyaev@gmail.com>
;; URL: http://github.com/s-kostyaev/elisa
;; Keywords: help local tools
-;; Package-Requires: ((emacs "29.2") (ellama "0.11.1") (llm "0.9.1") (async
"1.9.8") (plz "0.9"))
+;; Package-Requires: ((emacs "29.2") (ellama "0.11.2") (llm "0.9.1") (async
"1.9.8") (plz "0.9"))
;; Version: 0.1.4
;; SPDX-License-Identifier: GPL-3.0-or-later
;; Created: 18th Feb 2024
@@ -113,7 +113,18 @@
"You are professional search agent. With given context and user
prompt you need to create new prompt for search. It should be
concise and useful without additional context. Response with
-prompt only. User prompt:
+prompt only. You should replace all words like 'this' or 'it' to
+its values to make search successful. If user prompt contains
+question your prompt should also be in form of question. For
+example:
+
+- What is pony?
+- Pony is ...
+- How to buy it?
+
+How to buy a pony?
+
+ User prompt:
%s"
"Prompt template for prompt rewriting."
:group 'elisa
@@ -987,10 +998,34 @@ Return sqlite query that extract data for adding to
context."
(cl-incf collected-pages)))
urls)))
+(defun elisa--rewrite-prompt (prompt action)
+ "Rewrite PROMPT if `elisa-prompt-rewriting-enabled'.
+Call ACTION with new prompt."
+ (let ((session (and ellama--current-session-id
+ (with-current-buffer (ellama-get-session-buffer
+ ellama--current-session-id)
+ ellama--current-session))))
+ (if (and elisa-prompt-rewriting-enabled
+ ellama--current-session-id
+ (string= (llm-name (ellama-session-provider session))
+ (llm-name elisa-chat-provider)))
+ (with-current-buffer (get-buffer-create (make-temp-name "elisa"))
+ (ellama-stream
+ (format elisa-rewrite-prompt-template prompt)
+ :session session
+ :buffer (current-buffer)
+ :provider elisa-chat-provider
+ :on-done action))
+ (funcall action prompt))))
+
;;;###autoload
(defun elisa-web-search (prompt)
"Search the web for PROMPT."
(interactive "sAsk elisa with web search: ")
+ (elisa--rewrite-prompt prompt #'elisa--web-search-internal))
+
+(defun elisa--web-search-internal (prompt)
+ "Search the web for PROMPT."
(message "searching the web")
(elisa--async-do
(lambda () (elisa--web-search prompt))
@@ -1220,15 +1255,21 @@ It does nothing if buffer file not inside one of
existing collections."
"delete from collections where rowid = %d;"
collection-id))))
+(defun elisa--gen-chat (&optional collections)
+ "Generate function for chat with elisa based on COLLECTIONS."
+ (let ((cols (or collections elisa-enabled-collections)))
+ (lambda (prompt)
+ (elisa-find-similar
+ prompt cols
+ (lambda (query) (elisa-retrieve-ask query prompt))))))
+
;;;###autoload
(defun elisa-chat (prompt &optional collections)
"Send PROMPT to elisa.
Find similar quotes in COLLECTIONS and add it to context."
(interactive "sAsk elisa: ")
(let ((cols (or collections elisa-enabled-collections)))
- (elisa-find-similar
- prompt cols
- (lambda (query) (elisa-retrieve-ask query prompt)))))
+ (elisa--rewrite-prompt prompt (elisa--gen-chat cols))))
(provide 'elisa)
;;; elisa.el ends here.
- [elpa] externals/elisa 61bc97993e 16/98: Exclude load-file check not working in CI, (continued)
- [elpa] externals/elisa 61bc97993e 16/98: Exclude load-file check not working in CI, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa ad67b47b50 10/98: Improve docs, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa de9fa3c1a4 28/98: Fix docs, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 1f5a462be4 34/98: Add search duckduckgo function, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 3324a2e68d 41/98: Use plz to get web requests. Add optional search with searxng., ELPA Syncer, 2024/07/17
- [elpa] externals/elisa c050a9c987 42/98: Improve prompt rewrite template, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 50d7fa5963 43/98: Improve error handling, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa e50570e2ee 49/98: Inject missing variables for async execution, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa acf2521ad3 59/98: Add functions to prepare file list for parsing, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa f3bb796a65 64/98: Implement collection management, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa af9da0b561 68/98: Refactor prompt rewriting,
ELPA Syncer <=
- [elpa] externals/elisa 252ba926f9 73/98: Add ability to customize extensions path, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 35f6e3dbd1 75/98: Disable reranker by default, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 7d8da4cd04 79/98: Fix checkdoc warning, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 539b2ab04c 03/98: Add readme skeleton, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa fc5f9cae2a 45/98: Fix semantic split, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 2d8c6ef402 56/98: Use WAL for sqlite for handle concurrency, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 27fc248901 71/98: Remove files metadata on collection remove, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 5bf5d63fc1 07/98: Improve defaults, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 61dd36890a 21/98: Enable load file check in CI, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 1f5393d37e 22/98: Warn user instead of network call during package loading, ELPA Syncer, 2024/07/17