{"id":20703139,"url":"https://github.com/sfttech/emacs-elaiza","last_synced_at":"2025-08-19T08:12:05.121Z","repository":{"id":236335506,"uuid":"792377933","full_name":"SFTtech/emacs-elaiza","owner":"SFTtech","description":"Chat interface and library for interacting with different LLMs via Emacs.","archived":false,"fork":false,"pushed_at":"2025-03-19T15:16:56.000Z","size":953,"stargazers_count":12,"open_issues_count":1,"forks_count":0,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-03-19T15:41:06.059Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SFTtech.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"liberapay":"SFTtech"}},"created_at":"2024-04-26T14:45:14.000Z","updated_at":"2025-03-19T15:17:00.000Z","dependencies_parsed_at":"2024-04-26T16:44:31.603Z","dependency_job_id":"9ab782f9-db9f-4a18-82e2-37d22af5be14","html_url":"https://github.com/SFTtech/emacs-elaiza","commit_stats":null,"previous_names":["sfttech/emacs-elaiza"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SFTtech/emacs-elaiza","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SFTtech%2Femacs-elaiza","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SFTtech%2Femacs-elaiza/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SFTtech%2Femacs-elaiza/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SFTtech%2Femacs-elaiza/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SFTtech","download_url":"https://codeload.github.com/SFTtech/emacs-elaiza/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SFTtech%2Femacs-elaiza/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271121168,"owners_count":24702723,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T01:06:25.824Z","updated_at":"2025-08-19T08:12:05.090Z","avatar_url":"https://github.com/SFTtech.png","language":"Emacs Lisp","funding_links":["https://liberapay.com/SFTtech"],"categories":[],"sub_categories":[],"readme":"#+title: ELAIZA\n#+LAST_MODIFIED: [2025-03-19 Wed 15:54]\n#+HTML: \u003cimg src=\"./assets/logo.webp\" width=\"256px\" align=\"right\" alt=\"A cyberpunk-themed scene with a sleeker, less muscular hacker bunny wearing dark glasses, a stylish futuristic hoodie, and a visible black tank top beneath. The bunny, now with a slimmer, more toned build, exhibits a concentrated look as it types on an old-fashioned computer terminal. A half-eaten orange carrot is next to the keyboard. The scene is vibrantly lit with neon lights, enhancing the cyberpunk ambiance. A speech bubble above the bunny reads 'What's up Doc?' in a bold, cyber font, and the screen displays 'ELAIZA' in green monospaced font.\"/\u003e\n\n\nAn updated Emacs doctor.\n\nThis package provides a Large Language Model independent (LLM) backend with\nmultiple applications. For example, to honor its [[https://en.wikipedia.org/wiki/ELIZA][ancestor]], you can talk to a new\nArtificial Intelligence-enhanced (AI) Emacs doctor via =M-x elaiza-doctor=.\n\nFor general chatting, you can use =M-x elaiza-chat= directly from the minibuffer.\nBy default, you can chat with a local Rocket-3B model (see getting started).\nYou can switch backends by prefixing your commands with =C-u= and selecting an\navailable LLM (see supported backends).\n\nSimilar to OpenAI's GPTs, you can create your own assistants. For example, =M-x\nelaiza-editor= is a multilingual editor, giving you suggestions for your current\nbuffer. With =elaiza-jupyter= you can get org-mode responses that are optimized for\nPython code, similar to Jupyter Notebooks.\n\nUsing ELAIZA as the backend, you can build all kind of applications, like =elaiza-businesscard=, which parses an image of a business card and returns the annotated, OCR'ed result in org-mode format.\n\n* Installation\n\n** Doom Emacs\nAdd the following to your =packages.el=\n#+begin_src emacs-lisp\n(package! elaiza :recipe (:host github :repo \"SFTtech/emacs-elaiza\" :branch \"main\"))\n#+end_src\n\n* Usage\n#+HTML: \u003cimg src=\"./assets/elaiza-editor.png\" width=\"800px\" alt=\"Elaiza editor giving suggestions for this README.\"/\u003e\n** Getting Started\nIf you have no prior experience with LLMs and want to try ELAIZA, simply use  =M-x elaiza-chat=.\nThis will download a small model (Rocket-3B, 1.89 GB) to =~/llamafiles= and start the the server automatically.\nAfterwards you can start chatting with the model.\nNote, due to its size, it will have worse capabilities compared to larger models, such as GPT-4.\nYou can stop the server with =M-x elaiza-llamafile-stop=.\n\n** Key Bindings\nIn =elaiza-mode=, you can use =C-c \u003cRET\u003e= to continue the conversation (=elaiza-chat-continue=) and =C-c C-k= to interrupt the response (=elaiza-chat-interrupt=).\n\n** Applications\nCurrently, the following applications are available:\n- =M-x elaiza-chat= for direct minibuffer prompts\n- =M-x elaiza-doctor= for an AI-enhanced Emacs doctor experience\n- =M-x elaiza-editor= as a multilingual editor for suggestions in your current buffer\n- =M-x elaiza-jupyter= like =elaiza-chat= but with special Python instructions.\n- =M-x elaiza-businesscard= parse an image of a businesscard using GPT-4o mini.\n\n** Specifying a default model\nYou can specify a default backend using customize.\nAlternatively prefix the elaiza commands (=C-u=) or call =M-x elaiza-change-default-model=.\n*** GPT-4o\nFor example, in Doom Emacs, insert the following into your =config.el= to use =GPT-4o= as your default model.\n#+begin_src emacs-lisp\n(use-package! elaiza\n  :config (setq elaiza-default-model (make-elaiza-gpt-4o))\n#+end_src\n*** Llamafile: LLaMA-3 Instruct 8B\nIf you have downloaded a Llamafile already, for example, from https://github.com/mozilla-Ocho/llamafile, you can select it as default model by specifying its name and location.\n#+begin_src emacs-lisp\n(use-package! elaiza\n  :config\n  (setq elaiza-default-model (make-elaiza-llamafile\n                              :name \"Llamafile: LLaMA-3 8B\"\n                              :filename \"~/llamafiles/llama3.llamafile\")))\n#+end_src\n\n** API Keys\nSome backends, such as ChatGPT and Claude 3, require an API key.\nTo securely store and retrieve API keys, use auth-source, as documented in the [[https://www.gnu.org/software/emacs/manual/html_mono/auth.html][Emacs Auth Manual]]. Add the following to your =auth-sources= file, for example, =.authinfo.gpg=, to store them:\n\n*** Example: OpenAI\nCreate a key at https://platform.openai.com/api-keys.\nInsert into your =~/.authinfo.gpg=:\n#+begin_example\nmachine api.openai.com port https login elaiza password \u003cyour-api-key\u003e\n#+end_example\nUse =GPT-4 Turbo= as your default model by adding the following to your =config.el=:\n#+begin_src emacs-lisp\n(use-package! elaiza\n  :config (setq elaiza-default-model (make-elaiza-gpt-4-turbo)))\n#+end_src\n*** Example: Claude\nCreate a key at https://console.anthropic.com/settings/keys.\nInsert into your =~/.authinfo.gpg=:\n#+begin_example\nmachine api.anthropic.com port https login elaiza password \u003cyour-api-key\u003e\n#+end_example\nUse =Claude 3 Opus= as your default model by adding the following to your =config.el=:\n#+begin_src emacs-lisp\n(use-package! elaiza\n  :config (setq elaiza-default-model (make-elaiza-claude-opus)))\n#+end_src\n*** Example: Ollama\n#+begin_src emacs-lisp\n(use-package! elaiza\n  :config\n  (cl-defstruct (elaiza-ollama-qwq (:include elaiza-ollama (name \"Qwq\")\n                                   (port \"11434\")\n                                   (model \"qwq\"))))\n  (cl-defstruct (elaiza-ollama-qwen2.5-coder (:include elaiza-ollama (name \"Qwen 2.5 coder\")\n                                             (port \"11434\")\n                                             (model \"qwen2.5-coder:32b\"))))\n  (elaiza-backends--add-integration (make-elaiza-ollama-qwq))\n  (elaiza-backends--add-integration (make-elaiza-ollama-qwen2.5-coder))\n  ;; update the available backends for manual switching `M-x elaiza-change-default-model`\n  (setq elaiza-available-backends elaiza-backends-integrations-alist)\n  (setq! elaiza-default-model (make-elaiza-ollama-qwen2.5-coder)))\n#+end_src\n\n* Supported Backends\n\n| Model                   | Provider  | Sourcecode          |\n|-------------------------+-----------+---------------------|\n| GPT 4o                  | OpenAI    | =elaiza-openai.el=    |\n| GPT 4o mini             | OpenAI    | =elaiza-openai.el=    |\n| GPT 4                   | OpenAI    | =elaiza-openai.el=    |\n| GPT 4 Turbo             | OpenAI    | =elaiza-openai.el=    |\n| GPT 3.5 Turbo           | OpenAI    | =elaiza-openai.el=    |\n| Claude 3 Opus           | Anthropic | =elaiza-claude.el=    |\n| Claude 3 Sonnet         | Anthropic | =elaiza-claude.el=    |\n| Claude 3 Haiku          | Anthropic | =elaiza-claude.el=    |\n| [[https://github.com/mozilla-Ocho/llamafile?tab=readme-ov-file#other-example-llamafiles][Available Llamafiles]]    | [[https://github.com/mozilla-Ocho/llamafile][Llamafile]] | =elaiza-llamafile.el= |\n| [[https://ollama.com/library][Available Ollama Models]] | [[https://ollama.com/][Ollama]]    | =elaiza-ollama.el=    |\n\n* Alternatives\n- [[https://github.com/karthink/gptel][karthink/gptel]] GPTel: A simple LLM client for Emacs\n- [[https://github.com/ahyatt/llm][ahyatt/llm]]: llm package for emacs\n- [[https://github.com/s-kostyaev/ellama][s-kostyaev/ellama]]: Ellama is a tool for interacting with large language models from Emacs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsfttech%2Femacs-elaiza","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsfttech%2Femacs-elaiza","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsfttech%2Femacs-elaiza/lists"}