branch: externals/llm
commit faaa5ba71be54590b3c025d51914bfd6b944a23b
Author: Andrew Hyatt <ahy...@gmail.com>
Commit: Andrew Hyatt <ahy...@gmail.com>

    Make Claude streaming more reslient to whitespace changes
    
    Also, add Claude addition to the NEWS file
---
 NEWS.org      | 2 ++
 llm-claude.el | 7 ++++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/NEWS.org b/NEWS.org
index 3132d70bb9..3593d304ee 100644
--- a/NEWS.org
+++ b/NEWS.org
@@ -1,3 +1,5 @@
+* Version 0.12.0
+- Add provider =llm-claude=, for Anthropic's Claude.
 * Version 0.11.0
 - Introduce function calling, now available only in Open AI and Gemini.
 - Introduce =llm-capabilities=, which returns a list of extra capabilities for 
each backend.
diff --git a/llm-claude.el b/llm-claude.el
index 21af406c2d..15a50484de 100644
--- a/llm-claude.el
+++ b/llm-claude.el
@@ -72,7 +72,7 @@ STREAM is a boolean indicating whether the response should be 
streamed."
 (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) ?\") "}}"))))
+                        (group-n 1 ?\" (0+ anychar) ?\") (0+ whitespace) ?} 
(0+ whitespace) ?}))))
     (with-temp-buffer
       (insert response)
       ;; We use the quick and dirty solution of just looking for any line that
@@ -85,8 +85,9 @@ STREAM is a boolean indicating whether the response should be 
streamed."
                  (line-end-position))
                 matched-lines))
         (mapconcat (lambda (line)
-                     (string-match regex line)
-                     (read (match-string 1 line)))
+                     (if (string-match regex line)
+                         (read (match-string 1 line))
+                       (warn "Could not parse streaming response: %s" line)))
                    (nreverse matched-lines) "")))))
 
 (cl-defmethod llm-chat ((provider llm-claude) prompt)

Reply via email to