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))))