branch: elpa/gptel
commit c7370f79b3f1fea95dbea988f648ce0368231221
Author: Karthik Chikmagalur <karthikchikmaga...@gmail.com>
Commit: Karthik Chikmagalur <karthikchikmaga...@gmail.com>

    gptel: Fix schema property preprocessing for Gemini
    
    * gptel.el (gptel--preprocess-schema): Add a :propertyOrdering
    field to objects in JSON schemas specifically for Gemini.  Other
    backends seem to ignore this non-standard field, so we should be
    okay.
    
    For more information see
    URL 
https://ai.google.dev/gemini-api/docs/structured-output#property-ordering
---
 gptel.el | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/gptel.el b/gptel.el
index b6666540c5..72cf538ef7 100644
--- a/gptel.el
+++ b/gptel.el
@@ -1624,10 +1624,12 @@ Convert symbol :types to strings."
               (setcar (cdr tail) (symbol-name (cadr tail))))
             (when (equal (cadr tail) "object") ;Add additional object fields
               (plist-put tail :additionalProperties :json-false)
-              (let ((props
-                     (cl-loop for prop in (plist-get tail :properties) by 
#'cddr
-                              collect (substring (symbol-name prop) 1))))
-                (plist-put tail :required (vconcat props)))))
+              (let ((vprops (vconcat
+                             (cl-loop
+                              for prop in (plist-get tail :properties) by 
#'cddr
+                              collect (substring (symbol-name prop) 1)))))
+                (plist-put tail :required vprops)
+                (plist-put tail :propertyOrdering vprops))))
           (when (or (listp (cadr tail)) (vectorp (cadr tail)))
             (gptel--preprocess-schema (cadr tail)))
           (setq tail (cddr tail)))))

Reply via email to