;; YOU DON'T NEED NONE OF THIS CODE FOR SIMPLE INSTALL
;; IT IS AN EXAMPLE OF CUSTOMIZATION.
(use-package ellama
  :init
  (require 'llm-openai)
  ;; setup key bindings
  (setq ellama-keymap-prefix "C-c e")
  )

(setopt ellama-providers
	'(
	  ;; Ollama Provider (added here with a name)
	  ("ollama" . (make-llm-ollama
                             ;; Consider a dedicated embedding model if gemma isn't ideal for it.
                             :chat-model "gemma3:latest"
                             :embedding-model "gemma3:latest" ; Or e.g., "nomic-embed-text"
                             :default-chat-non-standard-params '(("num_ctx" . 8192))))

	  ("openai" . (make-llm-openai
                       :key (auth-source-pass-get "api-key" "www/openai.com/amr@gharbeia.net")
                       :chat-model "gpt-4o"
		       :embedding-model "text-embedding-3-large"))

          ("groq" . (make-llm-openai-compatible
                     :url "https://api.groq.com/openai/v1"
                     :key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net")
                     ;; Check Groq console for available models, these might change
                     :chat-model "llama3-70b-8192" ; Example, verify on Groq
                     :embedding-model "llama3-70b-8192")) ; Groq might not offer dedicated embedding models via this API
          ))

;; --- Set Active Providers ---
;; Choose your default provider from the list above by its name
(setopt ellama-provider "ollama") ; Or "ollama", "openai", "groq"

;; You can specify different providers for different tasks if needed
(setopt ellama-translation-provider "ollama")
(setopt ellama-naming-provider "ollama")
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)

(setq llm-debug t)

(use-package ellama
:ensure t
:bind ("C-c e" . ellama)
;; send last message in chat buffer with C-c C-c
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
:init (setopt ellama-auto-scroll t)
:config
;; show ellama context in header line in all buffers
(ellama-context-header-line-global-mode +1)
;; show ellama session id in header line in all buffers
(ellama-session-header-line-global-mode +1))

(use-package gptel)

(setq gptel-api-key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net"))

(gptel-make-openai "Groq"               ;Any name you want
:host "api.groq.com"
:endpoint "/openai/v1/chat/completions"
:stream t
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net")                   ;can be a function that returns the key
:models '(llama-3.1-70b-versatile
          llama-3.1-8b-instant
          llama3-70b-8192
          llama3-8b-8192
          mixtral-8x7b-32768
          gemma-7b-it))

(use-package elisa
  :defer t
  :init
  (setopt elisa-limit 5)
  (require 'llm-ollama)
  (setopt elisa-embeddings-provider (make-llm-ollama :embedding-model "nomic-embed-text"))
  (setopt elisa-chat-provider (make-llm-ollama
                               :chat-model "sskostyaev/openchat:8k-rag"
                               :embedding-model "nomic-embed-text"))
  )

(use-package opencortex
  :straight nil
  :load-path "~/.local/share/opencortex/src"
  :commands (opencortex-connect opencortex-disconnect)
  :init
  (setq opencortex-host "127.0.0.1")
  (setq opencortex-port 9105)
  (setq opencortex-executable-path "~/.local/share/opencortex/bin/opencortex-server")
  :config
  (message "opencortex: Local brain configured at %s" opencortex-executable-path))
