branch: elpa/aidermacs
commit 42afb31e799c3a612d86df3926ed390c78e26f85
Author: Mingde (Matthew) Zeng <matthew...@posteo.net>
Commit: Mingde (Matthew) Zeng <matthew...@posteo.net>

    Improve model selection algorithm
---
 aidermacs-models.el | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/aidermacs-models.el b/aidermacs-models.el
index 229cfe76b1..980226e201 100644
--- a/aidermacs-models.el
+++ b/aidermacs-models.el
@@ -118,10 +118,11 @@ API provider."
 (defun aidermacs--select-model ()
   "Provide model selection with completion.
 This is a private function used internally."
-  (let ((model (with-local-quit
-                 (completing-read "Select AI model: " aidermacs--cached-models 
nil t))))
-    (when model
-      (aidermacs--send-command (format "/model %s" model) t))))
+  (condition-case nil
+      (let ((model (completing-read "Select AI model: " 
aidermacs--cached-models nil t)))
+        (when model
+          (aidermacs--send-command (format "/model %s" model) t)))
+    (quit (message "Model selection cancelled"))))
 
 (defun aidermacs--get-available-models ()
   "Get list of models supported by aider using the /models command.
@@ -139,18 +140,22 @@ This fetches models from various API providers and caches 
them."
              (mapcar (lambda (line)
                        (substring line 2)) ; Remove "- " prefix
                      supported-models))
-       (dolist (url '("https://api.openai.com/v1";
-                      "https://openrouter.ai/api/v1";
-                      "https://api.deepseek.com";
-                      "https://api.anthropic.com/v1";
-                      "https://generativelanguage.googleapis.com/v1beta";))
-         (condition-case err
-             (let* ((fetched-models (aidermacs--fetch-openai-compatible-models 
url))
-                    (filtered-models (seq-filter (lambda (model)
-                                                   (member model 
supported-models))
-                                                 fetched-models)))
-               (setq models (append models filtered-models)))
-           (error (message "Failed to fetch models from %s: %s" url err))))
+       (dolist (url-token-pair '(("https://api.openai.com/v1"; . 
"OPENAI_API_KEY")
+                                 ("https://openrouter.ai/api/v1"; . 
"OPENROUTER_API_KEY")
+                                 ("https://api.deepseek.com"; . 
"DEEPSEEK_API_KEY")
+                                 ("https://api.anthropic.com/v1"; . 
"ANTHROPIC_API_KEY")
+                                 
("https://generativelanguage.googleapis.com/v1beta"; . "GEMINI_API_KEY")))
+         (let ((url (car url-token-pair))
+               (token-env (cdr url-token-pair))
+               (token-value (getenv (cdr url-token-pair))))
+           (when (and token-value (not (string-empty-p token-value)))
+             (condition-case err
+                 (let* ((fetched-models 
(aidermacs--fetch-openai-compatible-models url))
+                        (filtered-models (seq-filter (lambda (model)
+                                                       (member model 
supported-models))
+                                                     fetched-models)))
+                   (setq models (append models filtered-models)))
+               (error (message "Failed to fetch models from %s: %s" url 
(error-message-string err)))))))
        (setq aidermacs--cached-models models)
        (aidermacs--select-model)))))
 

Reply via email to