branch: elpa/aidermacs
commit f9eeaef993bf35cb740acf7dda18bb7034a5ca9e
Author: Arthur Heymans <art...@aheymans.xyz>
Commit: Arthur Heymans <art...@aheymans.xyz>

    aidermacs-models.el: Add support for getting gemini models
    
    The API is a bit different for google.
    
    Signed-off-by: Arthur Heymans <art...@aheymans.xyz>
---
 aidermacs-models.el | 33 +++++++++++++++++++++++++--------
 1 file changed, 25 insertions(+), 8 deletions(-)

diff --git a/aidermacs-models.el b/aidermacs-models.el
index 88944e9129..79df0f3be5 100644
--- a/aidermacs-models.el
+++ b/aidermacs-models.el
@@ -20,25 +20,41 @@
                       ((string= hostname "openrouter.ai") "openrouter")
                       ((string= hostname "api.deepseek.com") "deepseek")
                       ((string= hostname "api.anthropic.com") "anthropic")
+                      ((string= hostname "generativelanguage.googleapis.com") 
"gemini")
                       (t (error "Unknown API host: %s" hostname))))
          (token (cond ((string= hostname "api.openai.com") (getenv 
"OPENAI_API_KEY"))
                      ((string= hostname "openrouter.ai") (getenv 
"OPENROUTER_API_KEY"))
                      ((string= hostname "api.deepseek.com") (getenv 
"DEEPSEEK_API_KEY"))
                      ((string= hostname "api.anthropic.com") (getenv 
"ANTHROPIC_API_KEY"))
+                     ((string= hostname "generativelanguage.googleapis.com") 
(getenv "GEMINI_API_KEY"))
                      (t (error "Unknown API host: %s" hostname)))))
     (with-current-buffer
         (let ((url-request-extra-headers
-               (if (string= hostname "api.anthropic.com")
-                   `(("x-api-key" . ,token)
-                     ("anthropic-version" . "2023-06-01"))
-                 `(("Authorization" . ,(concat "Bearer " token))))))
-          (url-retrieve-synchronously (concat url "/models")))
+               (cond ((string= hostname "api.anthropic.com")
+                     `(("x-api-key" . ,token)
+                       ("anthropic-version" . "2023-06-01")))
+                     ((string= hostname "generativelanguage.googleapis.com")
+                      nil)  ; No auth headers for Gemini, key is in URL
+                     (t
+                      `(("Authorization" . ,(concat "Bearer " token)))))))
+          (url-retrieve-synchronously
+           (if (string= hostname "generativelanguage.googleapis.com")
+               (concat url "/models?key=" token)
+             (concat url "/models"))))
       (goto-char url-http-end-of-headers)
       (let* ((json-object-type 'alist)
              (json-data (json-read))
-             (models (alist-get 'data json-data)))
+             (models (if (string= hostname "generativelanguage.googleapis.com")
+                        (alist-get 'models json-data)
+                      (alist-get 'data json-data))))
         (mapcar (lambda (model)
-                  (concat prefix "/" (alist-get 'id model)))
+                  (concat prefix "/"
+                          (cond
+                           ((string= hostname 
"generativelanguage.googleapis.com")
+                            (replace-regexp-in-string "^models/" "" (alist-get 
'name model)))
+                           ((stringp model) model)  ; Handle case where model 
is just a string
+                           (t (or (alist-get 'id model)
+                                (alist-get 'name model))))))
                 models)))))
 
 (defun aidermacs--get-available-models ()
@@ -47,7 +63,8 @@
     (dolist (url '("https://api.openai.com/v1";
                    "https://openrouter.ai/api/v1";
                    "https://api.deepseek.com";
-                   "https://api.anthropic.com/v1";))
+                   "https://api.anthropic.com/v1";
+                   "https://generativelanguage.googleapis.com/v1beta";))
       (condition-case err
           (setq models (append models (fetch-openai-compatible-models url)))
         (error (message "Failed to fetch models from %s: %s" url err))))

Reply via email to