branch: elpa/gptel
commit 38bc5293e3f051d09ddc09d11a895552925da09a
Author: Shariff Faleel <[email protected]>
Commit: Karthik Chikmagalur <[email protected]>

    gptel: Normalize tool specs before resolving tool names
    
    Make preset parsing accept tool specs in a more uniform way,
    whether they are already tool objects, strings or in the form of
    `(category name)''.
    
    Tool handling in gptel-transient and preset mismatch computations
    now consistently resolves tool specifications through
    `gptel-get-tool' before extracting names.
    
    * gptel.el (gptel--apply-preset, gptel--preset-mismatch-value):
    Resolve each tool spec through `gptel-get-tool' when applying
    presets.
    
    * gptel-transient.el: (gptel--preset-mismatch-p): Resolve tool specs
      with `gptel-get-tool' before reading tool names.
---
 gptel-transient.el |  3 ++-
 gptel.el           | 13 ++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/gptel-transient.el b/gptel-transient.el
index f7db78dbd8..d00827784f 100644
--- a/gptel-transient.el
+++ b/gptel-transient.el
@@ -105,7 +105,8 @@ This is intended to be fast but imperfect.  See
           (setq val (cl-loop ; Check against tool names, not tools (faster 
with sorting)
                      for tool in (ensure-list (gptel--modify-value gptel-tools 
val))
                      for tool-name = (or (and (stringp tool) tool)
-                                         (ignore-errors (gptel-tool-name 
tool)))
+                                         (ignore-errors
+                                           (gptel-tool-name (gptel-get-tool 
tool))))
                      if (not (member tool-name uniq-tool-names))
                      collect tool-name into uniq-tool-names
                      finally return uniq-tool-names))
diff --git a/gptel.el b/gptel.el
index b6c13fc4f5..0216031208 100644
--- a/gptel.el
+++ b/gptel.el
@@ -2726,14 +2726,12 @@ example) apply the preset buffer-locally."
         (setq val (gptel--modify-value gptel-tools val))
         (let* ((tools
                 (flatten-list
-                 (cl-loop for tool-name in (ensure-list val)
-                          for tool = (cl-etypecase tool-name
-                                       (gptel-tool tool-name)
-                                       (string (ignore-errors
-                                                 (gptel-get-tool tool-name))))
+                 (cl-loop for tool-spec in (ensure-list val)
+                          for tool = (ignore-errors
+                                       (gptel-get-tool tool-spec))
                           do (unless tool
                                (user-error "gptel preset: Cannot find tool %S"
-                                           tool-name))
+                                           tool-spec))
                           collect tool))))
           (funcall setter 'gptel-tools (cl-delete-duplicates tools :test 
#'eq))))
        ((and (let sym (or (intern-soft
@@ -2843,7 +2841,8 @@ See also `gptel--preset-mismatch-p'."
                 for tool in preset-tools
                 for tool-name =
                 (or (and (stringp tool) tool)
-                    (ignore-errors (gptel-tool-name tool)))
+                    (ignore-errors (gptel-tool-name
+                                    (gptel-get-tool tool))))
                 if (not (member tool-name uniq-tool-names))
                 collect tool-name into uniq-tool-names
                 finally return

Reply via email to