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

    Handle safety related errors in Vertex / Gemini
---
 llm-vertex.el | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/llm-vertex.el b/llm-vertex.el
index 1764f24b32..46fe59c95c 100644
--- a/llm-vertex.el
+++ b/llm-vertex.el
@@ -117,10 +117,17 @@ KEY-GENTIME keeps track of when the key was generated, 
because the key must be r
   (llm-provider-chat-extract-error provider err-response))
 
 (cl-defmethod llm-provider-chat-extract-error ((_ llm-google) err-response)
-  (when-let ((err (assoc-default 'error err-response)))
+  (if-let ((err (assoc-default 'error err-response)))
     (format "Problem calling GCloud Vertex AI: status: %s message: %s"
             (assoc-default 'code err)
-            (assoc-default 'message err))))
+            (assoc-default 'message err))
+    (if-let ((candidates (assoc-default 'candidates err-response)))
+       (when (and (vectorp candidates)
+                  (> (length candidates) 0)
+                  (equal "SAFETY"
+                         (assoc-default 'finishReason (aref candidates 0))))
+         (format "Could not finish due to detected Gemini safety violations: 
%s"
+                 (assoc-default 'safetyRatings (aref candidates 0)))))))
 
 (cl-defmethod llm-provider-embedding-request ((provider llm-vertex) string)
   `(("instances" . [(("content" . ,string))])))

Reply via email to