[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/llm 9ce3d9e003 13/71: Port claude to llm-request-plz
From: |
ELPA Syncer |
Subject: |
[elpa] externals/llm 9ce3d9e003 13/71: Port claude to llm-request-plz |
Date: |
Fri, 17 May 2024 00:58:43 -0400 (EDT) |
branch: externals/llm
commit 9ce3d9e003e81ce75fa5fb78a194a73f25b8c02e
Author: Andrew Hyatt <ahyatt@gmail.com>
Commit: Andrew Hyatt <ahyatt@gmail.com>
Port claude to llm-request-plz
---
llm-claude.el | 147 ++++++++++++++++++++++++++++------------------------------
1 file changed, 72 insertions(+), 75 deletions(-)
diff --git a/llm-claude.el b/llm-claude.el
index 21af406c2d..3d0b8f7a55 100644
--- a/llm-claude.el
+++ b/llm-claude.el
@@ -68,94 +68,91 @@ STREAM is a boolean indicating whether the response should
be streamed."
(assoc-default 'text content)
(format "Unsupported non-text response: %s" content))))
-;; see https://docs.anthropic.com/claude/reference/messages-streaming
-(defun llm-claude-get-partial-response (response)
- "Return the partial response from text RESPONSE."
- (let ((regex (rx (seq "\"text\":" (0+ whitespace)
- (group-n 1 ?\" (* anychar) ?\") "}}"))))
- (with-temp-buffer
- (insert response)
- ;; We use the quick and dirty solution of just looking for any line that
- ;; has a "text" field.
- (let ((matched-lines))
- (goto-char (point-min))
- (while (re-search-forward "\"text\":" nil t)
- (push (buffer-substring-no-properties
- (line-beginning-position)
- (line-end-position))
- matched-lines))
- (mapconcat (lambda (line)
- (string-match regex line)
- (read (match-string 1 line)))
- (nreverse matched-lines) "")))))
-
(cl-defmethod llm-chat ((provider llm-claude) prompt)
(llm-claude-check-key provider)
(let ((content (llm-claude-get-response
- (llm-request-sync "https://api.anthropic.com/v1/messages"
- :headers `(("x-api-key" . ,(llm-claude-key
provider))
- ("anthropic-version" .
"2023-06-01"))
- :data (llm-claude-request provider prompt
nil)))))
+ (llm-request-plz-sync "https://api.anthropic.com/v1/messages"
+ :headers `(("x-api-key" .
,(llm-claude-key provider))
+ ("anthropic-version" .
"2023-06-01"))
+ :data (llm-claude-request provider
prompt nil)))))
(llm-provider-utils-append-to-prompt prompt content)
content))
(cl-defmethod llm-chat-async ((provider llm-claude) prompt response-callback
error-callback)
(llm-claude-check-key provider)
(let ((buf (current-buffer)))
- (llm-request-async "https://api.anthropic.com/v1/messages"
- :headers `(("x-api-key" . ,(llm-claude-key provider))
- ("anthropic-version" . "2023-06-01"))
- :data (llm-claude-request provider prompt nil)
- :on-success
- (lambda (response)
- (let ((content (llm-claude-get-response response)))
- (llm-provider-utils-append-to-prompt prompt content)
- (llm-request-callback-in-buffer
- buf
- response-callback
- content)))
- :on-error
- (lambda (_ msg)
- (message "Error: %s" msg)
- (let ((error (assoc-default 'error msg)))
- (llm-request-callback-in-buffer
- buf error-callback
- 'error
- (format "%s: %s" (assoc-default 'type error)
- (assoc-default 'message error))))))))
+ (llm-request-plz-async
+ "https://api.anthropic.com/v1/messages"
+ :headers `(("x-api-key" . ,(llm-claude-key provider))
+ ("anthropic-version" . "2023-06-01"))
+ :data (llm-claude-request provider prompt nil)
+ :on-success
+ (lambda (response)
+ (let ((content (llm-claude-get-response response)))
+ (llm-provider-utils-append-to-prompt prompt content)
+ (llm-request-callback-in-buffer
+ buf
+ response-callback
+ content)))
+ :on-error
+ (lambda (_ msg)
+ (message "Error: %s" msg)
+ (let ((error (assoc-default 'error msg)))
+ (llm-request-callback-in-buffer
+ buf error-callback
+ 'error
+ (format "%s: %s" (assoc-default 'type error)
+ (assoc-default 'message error))))))))
+;; see https://docs.anthropic.com/claude/reference/messages-streaming
(cl-defmethod llm-chat-streaming ((provider llm-claude) prompt partial-callback
response-callback error-callback)
(llm-claude-check-key provider)
- (let ((buf (current-buffer)))
- (llm-request-async "https://api.anthropic.com/v1/messages"
- :headers `(("x-api-key" . ,(llm-claude-key provider))
- ("anthropic-version" . "2023-06-01"))
- :data (llm-claude-request provider prompt t)
- :on-partial
- (lambda (data)
- (llm-request-callback-in-buffer
- buf
- partial-callback
- (llm-claude-get-partial-response data)))
- :on-success-raw
- (lambda (response)
- (let ((content
- (llm-claude-get-partial-response response)))
- (llm-provider-utils-append-to-prompt prompt content)
- (llm-request-callback-in-buffer
- buf
- response-callback
- content)))
- :on-error
- (lambda (_ msg)
- (message "Error: %s" msg)
- (let ((error (assoc-default 'error msg)))
- (llm-request-callback-in-buffer
- buf error-callback
- 'error
- (format "%s: %s" (assoc-default 'type error)
- (assoc-default 'message error))))))))
+ (let ((buf (current-buffer))
+ (in-flight-message ""))
+ (llm-request-plz-event-stream
+ "https://api.anthropic.com/v1/messages"
+ :headers `(("x-api-key" . ,(llm-claude-key provider))
+ ("anthropic-version" . "2023-06-01"))
+ :data (llm-claude-request provider prompt t)
+ :event-stream-handlers
+ ;; We ignore many types of messages; these might become important if
Claude
+ ;; sends a few different alternate contents, but for now they don't do
+ ;; that.
+ `(("message_start" . ,(lambda (_)))
+ ("content_block_start" . ,(lambda (_)))
+ ("ping" . ,(lambda (_)))
+ ("message_stop" . ,(lambda (_)))
+ ("content_block_stop" . ,(lambda (_)))
+ ("content_block_delta" .
+ ,(lambda (data)
+ (setq in-flight-message
+ (concat in-flight-message
+ (let* ((json (json-parse-string data :object-type
'alist))
+ (delta (assoc-default 'delta json))
+ (type (assoc-default 'type delta)))
+ (when (equal type "text_delta")
+ (assoc-default 'text delta)))))
+ (llm-request-callback-in-buffer
+ buf
+ partial-callback
+ in-flight-message))))
+ :on-success
+ (lambda (_)
+ (llm-provider-utils-append-to-prompt prompt in-flight-message)
+ (llm-request-callback-in-buffer
+ buf
+ response-callback
+ in-flight-message))
+ :on-error
+ (lambda (_ msg)
+ (message "Error: %s" msg)
+ (let ((error (assoc-default 'error msg)))
+ (llm-request-callback-in-buffer
+ buf error-callback
+ 'error
+ (format "%s: %s" (assoc-default 'type error)
+ (assoc-default 'message error))))))))
;; See https://docs.anthropic.com/claude/docs/models-overview
(cl-defmethod llm-chat-token-limit ((provider llm-claude))
- [elpa] externals/llm 829bedabe6 04/71: Support for vertex embeddings, adding callback compatibility, (continued)
- [elpa] externals/llm 829bedabe6 04/71: Support for vertex embeddings, adding callback compatibility, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 2ac956a060 05/71: Add support for the application/x-ndjson media type, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 63f2b8ffbc 10/71: Merge branch 'main' into plz, ELPA Syncer, 2024/05/17
- [elpa] externals/llm a9cd296cd8 02/71: Add llm-request-plz.el, ELPA Syncer, 2024/05/17
- [elpa] externals/llm f33475eeae 01/71: Add plz and media type and event source extensions, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 41d0889bcb 06/71: Make sync use of plz return data instead of object, converted Gemini, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 84678edfae 07/71: Merge pull request #28 from r0man/plz, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 9541d34656 08/71: Enable streaming in Open AI with plz modifications, ELPA Syncer, 2024/05/17
- [elpa] externals/llm c9ab8664ce 09/71: Support function streaming with Open AI & plz, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 3988fecb53 11/71: Make separate function for event streaming, w/ client-side handlers, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 9ce3d9e003 13/71: Port claude to llm-request-plz,
ELPA Syncer <=
- [elpa] externals/llm f9213b981c 14/71: Use the plz request module for everything in Claude, ELPA Syncer, 2024/05/17
- [elpa] externals/llm cdbb41528c 18/71: Fix issue advancing the process buffer, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 3441784ae2 19/71: Fix error handling., ELPA Syncer, 2024/05/17
- [elpa] externals/llm 6f9c604e58 20/71: Decode body and chunks using a coding system, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 62495de57f 21/71: Don't decode error response twice, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 03afb1d795 23/71: Use symbols for event types & improve timeout handling, ELPA Syncer, 2024/05/17
- [elpa] externals/llm e07c84b81b 24/71: Improve Curl/HTTP error handling, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 069bd193ef 26/71: Adding Gemini & Vertex streaming using plz, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 99814b533d 28/71: Changes to get at least some of Gemini / Vertex working, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 7919563997 30/71: Merge pull request #31 from r0man/plz, ELPA Syncer, 2024/05/17