[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/elisa 4710f87851 72/98: Refactor parsing info manuals
From: |
ELPA Syncer |
Subject: |
[elpa] externals/elisa 4710f87851 72/98: Refactor parsing info manuals |
Date: |
Wed, 17 Jul 2024 18:58:06 -0400 (EDT) |
branch: externals/elisa
commit 4710f878511fc9597d098003f3954cb287cea909
Author: Sergey Kostyaev <kostyaev.sergey2@wb.ru>
Commit: Sergey Kostyaev <kostyaev.sergey2@wb.ru>
Refactor parsing info manuals
---
elisa.el | 151 ++++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 82 insertions(+), 69 deletions(-)
diff --git a/elisa.el b/elisa.el
index 659ae5b5aa..df404a47e1 100644
--- a/elisa.el
+++ b/elisa.el
@@ -6,7 +6,7 @@
;; URL: http://github.com/s-kostyaev/elisa
;; Keywords: help local tools
;; Package-Requires: ((emacs "29.2") (ellama "0.11.2") (llm "0.9.1") (async
"1.9.8") (plz "0.9"))
-;; Version: 0.1.4
+;; Version: 0.2.0
;; SPDX-License-Identifier: GPL-3.0-or-later
;; Created: 18th Feb 2024
@@ -382,68 +382,69 @@ FOREIGN KEY(collection_id) REFERENCES collections(rowid)
(defun elisa-parse-info-manual (name collection-name)
"Parse info manual with NAME and save index to COLLECTION-NAME."
(with-temp-buffer
- (info name (current-buffer))
- (let ((collection-id (or (caar (sqlite-select
- elisa-db
- (format
- "select rowid from collections where name
= '%s';"
- collection-name)))
- (progn
- (sqlite-execute
- elisa-db
- (format
- "insert into collections (name) values ('%s');"
- collection-name))
- (caar (sqlite-select
+ (ignore-errors
+ (info name (current-buffer))
+ (let ((collection-id (or (caar (sqlite-select
elisa-db
(format
"select rowid from collections where
name = '%s';"
- collection-name))))))
- (kind-id (caar (sqlite-select
- elisa-db "select rowid from kinds where name =
'info';")))
- (continue t))
- (while continue
- (let* ((node-name (concat "(" (file-name-sans-extension
- (file-name-nondirectory
Info-current-file))
- ") "
- Info-current-node))
- (chunks (elisa-split-semantically)))
- (mapc
- (lambda (text)
- (let* ((hash (secure-hash 'sha256 text))
- (embedding (llm-embedding elisa-embeddings-provider text))
- (rowid
- (if-let ((rowid (caar (sqlite-select
- elisa-db
- (format "select rowid from data
where kind_id = %s and collection_id = %s and path = '%s' and hash = '%s';"
- kind-id collection-id
- (elisa-sqlite-escape
node-name) hash)))))
- nil
- (sqlite-execute
- elisa-db
- (format
- "insert into data(kind_id, collection_id, path, hash,
data) values (%s, %s, '%s', '%s', '%s');"
- kind-id collection-id
- (elisa-sqlite-escape node-name) hash
(elisa-sqlite-escape text)))
- (caar (sqlite-select
- elisa-db
- (format "select rowid from data where kind_id =
%s and collection_id = %s and path = '%s' and hash = '%s';"
- kind-id collection-id
- (elisa-sqlite-escape node-name) hash))))))
- (when rowid
- (sqlite-execute
- elisa-db
- (format "insert into data_embeddings(rowid, embedding) values
(%s, %s);"
- rowid (elisa-vector-to-sqlite embedding)))
- (sqlite-execute
- elisa-db
- (format "insert into data_fts(rowid, data) values (%s, '%s');"
- rowid (elisa-sqlite-escape text))))))
- chunks)
- (condition-case nil
- (funcall-interactively #'Info-forward-node)
- (error
- (setq continue nil))))))))
+ collection-name)))
+ (progn
+ (sqlite-execute
+ elisa-db
+ (format
+ "insert into collections (name) values
('%s');"
+ collection-name))
+ (caar (sqlite-select
+ elisa-db
+ (format
+ "select rowid from collections where
name = '%s';"
+ collection-name))))))
+ (kind-id (caar (sqlite-select
+ elisa-db "select rowid from kinds where name =
'info';")))
+ (continue t))
+ (while continue
+ (let* ((node-name (concat "(" (file-name-sans-extension
+ (file-name-nondirectory
Info-current-file))
+ ") "
+ Info-current-node))
+ (chunks (elisa-split-semantically)))
+ (mapc
+ (lambda (text)
+ (let* ((hash (secure-hash 'sha256 text))
+ (embedding (llm-embedding elisa-embeddings-provider text))
+ (rowid
+ (if-let ((rowid (caar (sqlite-select
+ elisa-db
+ (format "select rowid from data
where kind_id = %s and collection_id = %s and path = '%s' and hash = '%s';"
+ kind-id collection-id
+ (elisa-sqlite-escape
node-name) hash)))))
+ nil
+ (sqlite-execute
+ elisa-db
+ (format
+ "insert into data(kind_id, collection_id, path,
hash, data) values (%s, %s, '%s', '%s', '%s');"
+ kind-id collection-id
+ (elisa-sqlite-escape node-name) hash
(elisa-sqlite-escape text)))
+ (caar (sqlite-select
+ elisa-db
+ (format "select rowid from data where kind_id =
%s and collection_id = %s and path = '%s' and hash = '%s';"
+ kind-id collection-id
+ (elisa-sqlite-escape node-name)
hash))))))
+ (when rowid
+ (sqlite-execute
+ elisa-db
+ (format "insert into data_embeddings(rowid, embedding)
values (%s, %s);"
+ rowid (elisa-vector-to-sqlite embedding)))
+ (sqlite-execute
+ elisa-db
+ (format "insert into data_fts(rowid, data) values (%s,
'%s');"
+ rowid (elisa-sqlite-escape text))))))
+ chunks)
+ (condition-case nil
+ (funcall-interactively #'Info-forward-node)
+ (error
+ (setq continue nil)))))))))
(defun elisa--find-similar (text collections)
"Find similar to TEXT results in COLLECTIONS.
@@ -1076,6 +1077,13 @@ WHERE d.rowid in %s;"
(format elisa-chat-prompt-template prompt)
nil :provider elisa-chat-provider))))
+(defun elisa--info-valid-p (name)
+ "Return NAME if info is valid."
+ (with-temp-buffer
+ (ignore-errors
+ (info name (current-buffer))
+ name)))
+
(defun elisa-get-builtin-manuals ()
"Get builtin manual names list."
(mapcar
@@ -1089,21 +1097,25 @@ WHERE d.rowid in %s;"
(defun elisa-get-external-manuals ()
"Get external manual names list."
- (seq-uniq
+ (cl-remove-if
+ #'not
(mapcar
- #'file-name-base
- (process-lines
- elisa-find-executable
- (file-truename
- (file-name-concat user-emacs-directory "elpa"))
- "-name" "*.info"))))
+ #'elisa--info-valid-p
+ (seq-uniq
+ (mapcar
+ #'file-name-base
+ (process-lines
+ elisa-find-executable
+ (file-truename
+ (file-name-concat user-emacs-directory "elpa"))
+ "-name" "*.info"))))))
;;;###autoload
(defun elisa-parse-builtin-manuals ()
"Parse builtin manuals."
(interactive)
(mapc (lambda (s)
- (ignore-errors (elisa-parse-info-manual s "builtin manuals")))
+ (elisa-parse-info-manual s "builtin manuals"))
(elisa-get-builtin-manuals)))
;;;###autoload
@@ -1111,7 +1123,7 @@ WHERE d.rowid in %s;"
"Parse external manuals."
(interactive)
(mapc (lambda (s)
- (ignore-errors (elisa-parse-info-manual s "external manuals")))
+ (elisa-parse-info-manual s "external manuals"))
(elisa-get-external-manuals)))
;;;###autoload
@@ -1148,6 +1160,7 @@ Call ON-DONE callback with result as an argument after
FUNC evaluation done."
,(async-inject-variables "ellama-long-lines-length")
,(async-inject-variables "elisa-reranker-enabled")
,(async-inject-variables "load-path")
+ ,(async-inject-variables "Info-directory-list")
(require 'elisa)
(,func))
(lambda (res)
- [elpa] externals/elisa 61dd36890a 21/98: Enable load file check in CI, (continued)
- [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
- [elpa] externals/elisa 80401a0b52 30/98: Search for gzipped builtin manuals, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa c59d491e18 35/98: Add prompt rewriting with ellama-chain, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 3874a7007c 36/98: Improve semantic split api, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa f2bf34b201 39/98: Improve sqlite escape function, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 45b854ba2d 46/98: Fix linter warning, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa d58e172912 48/98: Make web search async, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa f312d189f2 51/98: Fix one word lines in webpage quotes parsed asyncronously, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 0fc73b4b9a 69/98: Add instruction to elisa-chat, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 4710f87851 72/98: Refactor parsing info manuals,
ELPA Syncer <=
- [elpa] externals/elisa 86f4ea0afb 74/98: Fix parsing info manuals with infinite loop, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 9c7004e15c 77/98: Add functionality to parse web pages and add them to collections, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 4063c45908 78/98: Add custom variables documentation, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 0c432dd1c8 81/98: Add commands to documentation, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 29c17f86a7 83/98: Update package description, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa cb69d24b0d 88/98: Improve documentation, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 8d0ad42134 90/98: Small documentation markup fixes, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 55200f8d8b 89/98: Fix readme markup for github rendering, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa 21048a5033 91/98: Add melpa stable badge, ELPA Syncer, 2024/07/17
- [elpa] externals/elisa fe93e52d2a 95/98: Review fixes, ELPA Syncer, 2024/07/17