[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/llm 2ea07f9197 25/71: Merge pull request #30 from r0man
From: |
ELPA Syncer |
Subject: |
[elpa] externals/llm 2ea07f9197 25/71: Merge pull request #30 from r0man/plz-event-type-symbol |
Date: |
Fri, 17 May 2024 00:58:45 -0400 (EDT) |
branch: externals/llm
commit 2ea07f91972610927abe131f520d81530a6394f4
Merge: 2a0651adc2 e07c84b81b
Author: Andrew Hyatt <ahyatt@gmail.com>
Commit: GitHub <noreply@github.com>
Merge pull request #30 from r0man/plz-event-type-symbol
Plz event type symbol
---
llm-claude.el | 14 +++++++-------
llm-openai.el | 4 ++--
plz-event-source.el | 19 +++++++++----------
plz-media-type.el | 34 +++++++++++++++++++++++-----------
4 files changed, 41 insertions(+), 30 deletions(-)
diff --git a/llm-claude.el b/llm-claude.el
index 3e85c43b9d..30d3912947 100644
--- a/llm-claude.el
+++ b/llm-claude.el
@@ -119,19 +119,19 @@ STREAM is a boolean indicating whether the response
should be streamed."
;; 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" .
+ `((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")
+ (when (eql type 'text_delta)
(assoc-default 'text delta)))))
(llm-request-plz-callback-in-buffer
buf
diff --git a/llm-openai.el b/llm-openai.el
index 17eb3ce448..17ecc30d68 100644
--- a/llm-openai.el
+++ b/llm-openai.el
@@ -303,13 +303,13 @@ RESPONSE can be nil if the response is complete."
:headers (llm-openai--headers provider)
:data (llm-openai--chat-request (llm-openai-chat-model provider) prompt t)
:event-stream-handlers
- `(("message" . ,(lambda (data)
+ `((message . ,(lambda (data)
(when (not (equal data "[DONE]"))
(when-let ((response
(llm-openai--get-partial-chat-response
(json-read-from-string data))))
(when (stringp response)
(llm-request-plz-callback-in-buffer buf
partial-callback response))))))
- ("error" . ,(lambda (data)
+ (error . ,(lambda (data)
(llm-request-plz-callback-in-buffer
buf error-callback 'error data))))
:on-error (lambda (_ data)
diff --git a/plz-event-source.el b/plz-event-source.el
index 0bdb7ebf5e..c6861f7deb 100644
--- a/plz-event-source.el
+++ b/plz-event-source.el
@@ -33,7 +33,6 @@
(require 'cl-lib)
(require 'eieio)
-(require 'pcase)
(require 'plz)
(require 'plz-media-type)
(require 'rx)
@@ -61,9 +60,9 @@
(type
:accessor plz-event-source-event-type
:initarg :type
- :initform "message"
+ :initform 'message
:documentation "The event type."
- :type string))
+ :type symbol))
"The server sent event class.")
;; Parser
@@ -145,8 +144,8 @@
last-event-id)
:origin (buffer-name)
:type (if (string-blank-p event-type-buffer)
- "message"
- event-type-buffer))))
+ 'message
+ (intern event-type-buffer)))))
(setf data-buffer ""
event-type-buffer "")
(setf events (cons event events))
@@ -339,7 +338,7 @@
"Open a connection to the URL of the event SOURCE."
(with-slots (buffer errors options ready-state parser) source
(with-current-buffer (get-buffer-create buffer)
- (let ((event (plz-event-source-event :type "open")))
+ (let ((event (plz-event-source-event :type 'open)))
(setf ready-state 'connecting)
(setf parser (plz-event-source-parser
:buffer buffer
@@ -351,7 +350,7 @@
(cl-defmethod plz-event-source-close ((source plz-buffer-event-source))
"Close the connection of the event SOURCE."
(with-slots (buffer ready-state) source
- (let ((event (plz-event-source-event :type "close")))
+ (let ((event (plz-event-source-event :type 'close)))
(setf ready-state 'closed)
(plz-event-source-dispatch-event source event)
source)))
@@ -414,7 +413,7 @@
(cl-defmethod plz-media-type-else ((_ plz-media-type:text/event-stream) error)
"Transform the ERROR into a format suitable for MEDIA-TYPE."
(let* ((source plz-event-source--current)
- (event (plz-event-source-event :type "error" :data error)))
+ (event (plz-event-source-event :type 'error :data error)))
(plz-event-source-close source)
(plz-event-source-dispatch-event source event)
error))
@@ -433,11 +432,11 @@
(let ((type (car pair))
(handler (cdr pair)))
(cond
- ((equal "open" type)
+ ((equal 'open type)
(cons type (lambda (source event)
(setf (oref event data)
response)
(funcall handler source
event))))
- ((equal "close" type)
+ ((equal 'close type)
(cons type (lambda (source event)
(setf (oref event data)
response)
(funcall handler source
event))))
diff --git a/plz-media-type.el b/plz-media-type.el
index e7f13f8a87..f8094c057e 100644
--- a/plz-media-type.el
+++ b/plz-media-type.el
@@ -76,6 +76,10 @@
(cl-defgeneric plz-media-type-process (media-type process chunk)
"Process the CHUNK according to MEDIA-TYPE using PROCESS.")
+(cl-defmethod plz-media-type-else ((_ (eql nil)) error)
+ "Transform the ERROR into a format suitable for MEDIA-TYPE."
+ error)
+
(defun plz-media-type-parse (header)
"Parse the Content-Type HEADER.
@@ -348,19 +352,27 @@ be `hash-table', `alist' (the default) or `plist'."
(t . ,(plz-media-type:application/octet-stream)))
"Alist from media type to content type.")
-(defun plz-media-type--handle-sync-error (media-types error)
- "Handle the synchronous ERROR of type `plz-http-error' with MEDIA-TYPES."
+(defun plz-media-type--handle-sync-http-error (error media-types)
+ "Handle the synchronous HTTP ERROR using MEDIA-TYPES."
(let* ((msg (cadr error))
(plzerror (caddr error)))
(signal (car error)
- (let ((response (plz-error-response plzerror)))
- (if-let (media-type (plz-media-type--of-response media-types
response))
- (list msg (with-temp-buffer
- (when-let (body (plz-response-body response))
- (insert body)
- (goto-char (point-min)))
- (plz-media-type-else media-type plzerror)))
- (cdr error))))))
+ (cond
+ ((plz-error-response plzerror)
+ (let ((response (plz-error-response plzerror)))
+ (if-let (media-type (plz-media-type--of-response media-types
response))
+ (list msg (with-temp-buffer
+ (when-let (body (plz-response-body response))
+ (insert body)
+ (goto-char (point-min)))
+ (plz-media-type-else media-type plzerror)))
+ (cdr error))))))))
+
+(defun plz-media-type--handle-sync-error (error media-types)
+ "Handle the synchronous ERROR using MEDIA-TYPES."
+ (if (eq 'plz-http-error (car error))
+ (plz-media-type--handle-sync-http-error error media-types)
+ (signal (car error) (cdr error))))
(cl-defun plz-media-type-request
(method
@@ -498,7 +510,7 @@ not.
((processp result)
result)
(t (user-error "Unexpected response: %s" result))))
- (plz-error (plz-media-type--handle-sync-error media-types error)))
+ (plz-error (plz-media-type--handle-sync-error error media-types)))
(apply #'plz (append (list method url) rest))))
;;;; Footer
- [elpa] externals/llm 006cd1d6b2 59/71: Handle safety related errors in Vertex / Gemini, (continued)
- [elpa] externals/llm 006cd1d6b2 59/71: Handle safety related errors in Vertex / Gemini, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 8a384aa073 61/71: Run handler code via a timer, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 95b9b8b515 68/71: Improve error handling in Vertex and Ollama, ELPA Syncer, 2024/05/17
- [elpa] externals/llm ece9b1fc82 69/71: Remove llm-request and fix requires, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 7f73a59fd1 12/71: Remove media-types from llm-request-plz-async, ELPA Syncer, 2024/05/17
- [elpa] externals/llm f41c55a44e 15/71: Switch Open AI completely to plz, fix async request method, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 83f05280fc 16/71: Strip plz changes and add JSON array stream media type, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 5bb3dadf25 17/71: Handle empty choices, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 2a0651adc2 22/71: Merge pull request #29 from r0man/plz, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 27884dcb32 27/71: Port ollama to plz, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 2ea07f9197 25/71: Merge pull request #30 from r0man/plz-event-type-symbol,
ELPA Syncer <=
- [elpa] externals/llm 623bceda67 29/71: Fix issue with JSON array parser nor emitting all objects, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 385ce9cdac 32/71: Use the streaming endpoint for the Vertex provider, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 1fb8511867 36/71: Use media type only in the llm-request-plz-async call, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 5623482527 37/71: Fix error handling in Gemini and Vertex provider, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 669456cba5 43/71: Fix Ollama error handling and appending to prompt, ELPA Syncer, 2024/05/17
- [elpa] externals/llm c26bf648a8 44/71: Increase llm-request-plz-timeout to 2 minutes, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 9a9b0de0df 52/71: Add llm-request-plz-connect-timeout, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 5145074ba0 57/71: Merge branch 'main' into plz, ELPA Syncer, 2024/05/17
- [elpa] externals/llm dda5d1f2d0 62/71: Call handler functions only with the event object, ELPA Syncer, 2024/05/17
- [elpa] externals/llm 2146ba3803 64/71: Change some function names and make most of them private (#42), ELPA Syncer, 2024/05/17