diff options
-rw-r--r-- | elisp/ai-query.el | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/elisp/ai-query.el b/elisp/ai-query.el index 80c9918..3bc621c 100644 --- a/elisp/ai-query.el +++ b/elisp/ai-query.el @@ -27,14 +27,8 @@ "https://gandalf.lakera.ai/api/send-message" "AI security endpoint, use it for queries.") -(defun ai-query-request (prompt) - "Query the API with this PROMPT." - (thread-first - (if (use-region-p) - (buffer-substring-no-properties (region-beginning) (region-end)) - (read-string "What is your question? ")) - (list) - (interactive)) +(defun ai-query--request (prompt callback) + "Async request to API using PROMPT and process with CALLBACK." (let ((url-request-method "POST") (url-request-extra-headers '(("Content-Type" . "application/x-www-form-urlencoded"))) @@ -43,16 +37,28 @@ (list 'prompt prompt) (cons '((defender "baseline"))) (url-build-query-string)))) + (url-retrieve ai-query-api callback))) + +(defun ai-query--process-response (_status) + "Callback function to process response." + (goto-char url-http-end-of-headers) + (let ((response (json-parse-buffer))) (with-current-buffer (get-buffer-create "*AI reply*") (markdown-mode) (erase-buffer) - (insert "# Question\n" prompt) - (insert "\n\n# Answer\n\n" - (with-current-buffer - (url-retrieve-synchronously ai-query-api) - (goto-char url-http-end-of-headers) - (gethash "answer" (json-parse-buffer)))) + (insert "# Question\n" (gethash "prompt" response)) + (insert "\n\n# Answer\n\n" (gethash "answer" response)) (display-buffer (current-buffer))))) +(defun ai-query-request (prompt) + "Query the API with this PROMPT." + (thread-first + (if (use-region-p) + (buffer-substring-no-properties (region-beginning) (region-end)) + (read-string "What is your question? ")) + (list) + (interactive)) + (ai-query--request prompt #'ai-query--process-response)) + (provide 'ai-query) ;;; ai-query.el ends here |