|
| 1 | +(ns eca.llm-providers.azure |
| 2 | + (:require |
| 3 | + [clojure.string :as string] |
| 4 | + [eca.config :as config] |
| 5 | + [eca.features.login :as f.login])) |
| 6 | + |
| 7 | +(defmethod f.login/login-step ["azure" :login/start] [{:keys [db* chat-id provider send-msg!]}] |
| 8 | + (swap! db* assoc-in [:chats chat-id :login-provider] provider) |
| 9 | + (swap! db* assoc-in [:auth provider] {:step :login/waiting-api-key}) |
| 10 | + (send-msg! "Paste your API Key")) |
| 11 | + |
| 12 | +(defmethod f.login/login-step ["azure" :login/waiting-api-key] [{:keys [input db* provider send-msg!]}] |
| 13 | + (swap! db* assoc-in [:auth provider] {:step :login/waiting-api-url |
| 14 | + :api-key input}) |
| 15 | + (send-msg! "Inform the API URL (ex: 'https://your-resource-name.openai.azure.com'):")) |
| 16 | + |
| 17 | +(defmethod f.login/login-step ["azure" :login/waiting-api-url] [{:keys [input db* provider send-msg!]}] |
| 18 | + (swap! db* update-in [:auth provider] merge {:step :login/waiting-models |
| 19 | + :url input}) |
| 20 | + (send-msg! "Inform one or more models (separated by `,`):")) |
| 21 | + |
| 22 | +(defmethod f.login/login-step ["azure" :login/waiting-models] [{:keys [input db* provider send-msg!] :as ctx}] |
| 23 | + (let [{:keys [api-url api-key]} (get-in @db* [:auth provider])] |
| 24 | + (config/update-global-config! {:providers {"azure" {:api "openai-responses" |
| 25 | + :url api-url |
| 26 | + :completionUrlRelativePath "/openai/responses?api-version=2025-04-01-preview" |
| 27 | + :models (reduce |
| 28 | + (fn [models model-str] |
| 29 | + (assoc models (string/trim model-str) {})) |
| 30 | + {} |
| 31 | + (string/split input #",")) |
| 32 | + :key api-key}}})) |
| 33 | + (swap! db* assoc-in [:auth provider] nil) |
| 34 | + (send-msg! (format "API key, url and models saved to %s" (.getCanonicalPath (config/global-config-file)))) |
| 35 | + (f.login/login-done! ctx)) |
0 commit comments