karthink / gptel

A simple LLM client for Emacs
GNU General Public License v3.0
1.21k stars 122 forks source link

gptel-menu gives error #348

Open ankitf opened 1 month ago

ankitf commented 1 month ago

gtel version - v0.9.0

transient-setup: Wrong type argument: (or eieio-object cl-structure-object oclosure), ""
karthink commented 1 month ago

How did you install gptel?

DouwMarx commented 1 month ago

I have the same issue. My gptel-menu is no longer working with -v0.9.0.

I use spacemacs and included gptel in dotspacemacs-additional-packages as stated in gptel readme. My understanding is that this installs gptel from MELPA? Thanks.

karthink commented 1 month ago

Can you produce a backtrace? M-x toggle-debug-on-error and produce the error.

0x715C commented 1 month ago

Running emacs-gptel from guix packages @ commit 8c6e724686ac37ff7955b97d9bfd03176b14d82a in a guix shell.


  transient--exit-and-debug(error (wrong-type-argument (or eieio-object cl-structure-object oclosure) ""))
  eieio-oref("" key)
  #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_171>("")
  transient--maybe-pad-keys(#<transient-column transient-column-b9df214> #<transient-columns transient-columns-b9df0dc>)
  #f(compiled-function (column) #<bytecode 0x97c7da258ac159a>)(#<transient-column transient-column-b9df214>)
  mapcar(#f(compiled-function (column) #<bytecode 0x97c7da258ac159a>) (#<transient-column transient-column-b9df10e> #<transient-column transient-column-b9df214>))
  #f(compiled-function (group) #<bytecode 0xe79175334a628c1>)(#<transient-columns transient-columns-b9df0dc>)
  apply(#f(compiled-function (group) #<bytecode 0xe79175334a628c1>) #<transient-columns transient-columns-b9df0dc>)
  #f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>)(#<transient-columns transient-columns-b9df0dc>)
  #f(compiled-function (cl--cnm group) #<bytecode -0x4b40a9e5299e6df>)(#f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>) #<transient-columns transient-columns-b9df0dc>)
  apply(#f(compiled-function (cl--cnm group) #<bytecode -0x4b40a9e5299e6df>) #f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>) #<transient-columns transient-columns-b9df0dc>)
  #f(compiled-function (group) "Insert GROUP's description, if any." #<bytecode 0x1e07387d87fc2035>)(#<transient-columns transient-columns-b9df0dc>)
  apply(#f(compiled-function (group) "Insert GROUP's description, if any." #<bytecode 0x1e07387d87fc2035>) #<transient-columns transient-columns-b9df0dc> nil)
  transient--insert-group(#<transient-columns transient-columns-b9df0dc>)
  transient--insert-groups()
  transient--show()
  transient--redisplay()
  transient-setup(gptel-menu)
  gptel-menu()
  funcall-interactively(gptel-menu)
  command-execute(gptel-menu record)
  execute-extended-command(nil "gptel-menu" nil)
  funcall-interactively(execute-extended-command nil "gptel-menu" nil)
  command-execute(execute-extended-command)```
ankitf commented 1 month ago

How did you install gptel?

I installed it using straight use package. Here is the installation excerpt from my config.

#+begin_src emacs-lisp
  (use-package gptel
    :straight t 
   ) 
#+end_src
ankitf commented 1 month ago

Can you produce a backtrace? M-x toggle-debug-on-error and produce the error.

Here is the trace.

Debugger entered--Lisp error: (wrong-type-argument (or eieio-object cl-structure-object oclosure) "")
  transient--exit-and-debug(error (wrong-type-argument (or eieio-object cl-structure-object oclosure) ""))
  eieio-oref("" key)
  #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_167>("")
  transient--maybe-pad-keys(#<transient-column transient-column-160b6dda7888> #<transient-columns transient-columns-160b6dda7750>)
  #f(compiled-function (column) #<bytecode -0x13f2c378d47e6432>)(#<transient-column transient-column-160b6dda7888>)
  mapcar(#f(compiled-function (column) #<bytecode -0x13f2c378d47e6432>) (#<transient-column transient-column-160b6dda7782> #<transient-column transient-column-160b6dda7888>))
  #f(compiled-function (group) #<bytecode 0x1039c6fdfac53f00>)(#<transient-columns transient-columns-160b6dda7750>)
  apply(#f(compiled-function (group) #<bytecode 0x1039c6fdfac53f00>) #<transient-columns transient-columns-160b6dda7750>)
  #f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>)(#<transient-columns transient-columns-160b6dda7750>)
  #f(compiled-function (cl--cnm group) #<bytecode -0x4831328a62834df>)(#f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>) #<transient-columns transient-columns-160b6dda7750>)
  apply(#f(compiled-function (cl--cnm group) #<bytecode -0x4831328a62834df>) #f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>) #<transient-columns transient-columns-160b6dda7750>)
  #f(compiled-function (group) "Insert GROUP's description, if any." #<bytecode 0x7223506b0ca2037>)(#<transient-columns transient-columns-160b6dda7750>)
  apply(#f(compiled-function (group) "Insert GROUP's description, if any." #<bytecode 0x7223506b0ca2037>) #<transient-columns transient-columns-160b6dda7750> nil)
  transient--insert-group(#<transient-columns transient-columns-160b6dda7750>)
  transient--insert-groups()
  transient--show()
  transient--redisplay()
  transient-setup(gptel-menu)
  gptel-menu()
  funcall-interactively(gptel-menu)
  command-execute(gptel-menu record)
  execute-extended-command(nil "gptel-menu" nil)
  funcall-interactively(execute-extended-command nil "gptel-menu" nil)
  command-execute(execute-extended-command)
karthink commented 1 month ago

What is the version of transient you're using? To find it you can run M-x find-library, transient, then look at the header:

;; Package-Version: 0.6.0
0x715C commented 1 month ago
;; Package-Version: 0.7.3

Running gptel-menu in emacs 29.4 with gptel v0.8.6 and emacs-transient v0.7.3 works fine. gptel v0.9.0 gives the error.

ankitf commented 1 month ago

Transient,

;; Package-Version: 0.4.1

I updated transient to 0.7.3. Gives the same error.

ankitf commented 1 month ago

I updated transient to version 0.7.3, which caused numerous errors in both Magit and Dirvish. Hence, I decided to do a fresh installation of all the straight packages (it's been 3 years since I updated the packages).

After the fresh installation, transient is at version 0.7.3. and gptel-menu works just fine now. All the errors of magit and dirvish are also resolved. Thanks for looking into it. @karthink

0x715C commented 1 month ago

This commit gptel-menu works fine. The next commit does not guix shell --pure --with-commit=emacs-gptel=5d093f2135dcf69c8493183902e5b932b0aa2c2b emacs emacs-gptel emacs-transient -- emacs

Debugger entered--Lisp error: (wrong-type-argument (or eieio-object cl-structure-object oclosure) "")
  transient--exit-and-debug(error (wrong-type-argument (or eieio-object cl-structure-object oclosure) ""))
  eieio-oref("" key)
  #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_171>("")
  transient--maybe-pad-keys(#<transient-column transient-column-733385c> #<transient-columns transient-columns-73322aa>)
  #f(compiled-function (column) #<bytecode -0x125140492c585751>)(#<transient-column transient-column-733385c>)
  mapcar(#f(compiled-function (column) #<bytecode -0x125140492c585751>) (#<transient-column transient-column-73322e4> #<transient-column transient-column-733385c>))
  #f(compiled-function (group) #<bytecode 0x851e45735231781>)(#<transient-columns transient-columns-73322aa>)
  apply(#f(compiled-function (group) #<bytecode 0x851e45735231781>) #<transient-columns transient-columns-73322aa>)
  #f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>)(#<transient-columns transient-columns-73322aa>)
  #f(compiled-function (cl--cnm group) #<bytecode -0x4b708eb4c583e9f>)(#f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>) #<transient-columns transient-columns-73322aa>)
  apply(#f(compiled-function (cl--cnm group) #<bytecode -0x4b708eb4c583e9f>) #f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>) #<transient-columns transient-columns-73322aa>)
  #f(compiled-function (group) "Insert GROUP's description, if any." #<bytecode 0x1e31532587fc2035>)(#<transient-columns transient-columns-73322aa>)
  apply(#f(compiled-function (group) "Insert GROUP's description, if any." #<bytecode 0x1e31532587fc2035>) #<transient-columns transient-columns-73322aa> nil)
  transient--insert-group(#<transient-columns transient-columns-73322aa>)
  transient--insert-groups()
  transient--show()
  transient--redisplay()
  transient-setup(gptel-menu)
  gptel-menu()
  funcall-interactively(gptel-menu)
  command-execute(gptel-menu record)
  execute-extended-command(nil "gptel-menu" "gptel-menu")
  funcall-interactively(execute-extended-command nil "gptel-menu" "gptel-menu")
  command-execute(execute-extended-command)

karthink commented 1 month ago

@0x715C Thanks for pinpointing the commit, I can see what's causing the error now. It's the use of :pad-keys with the empty line "" here. But I'm not sure why yet.

@ankitf You're using Transient 0.7.3 now (same as @0x715C) but don't experience this issue any more? That's puzzling.

0x715C commented 1 month ago

@0x715C Thanks for pinpointing the commit, I can see what's causing the error now. It's the use of :pad-keys with the empty line "" here. But I'm not sure why yet.

I can confirm that gptel-send does not produce an error, and seems to work, after removing ":pad-keys t" from gptel-transient.el. I'm not familiar with transient so I have no more ideas.

ankitf commented 1 month ago

@karthink Yes. using Transient 0.7.3 now. In my opinion source, of the error is some other package. I had the same setup in a new machine with fresh install and there was no error. But it threw the error in my daily machine where most of the packages were old.

karthink commented 3 weeks ago

I cannot reproduce this error with the latest version of transient (0.7.4). Can someone experiencing the issue check this?

(Note: I couldn't reproduce this with transient 0.7.3 either.)

0x715C commented 3 weeks ago

Yea, I still get the error with guix time-machine -- shell --pure emacs emacs-gptel emacs-transient -- emacs.

apcode commented 2 weeks ago

I get this error: emacs 29.4 gptel 0.9.0 transient 0.7.4


Debugger entered--Lisp error: (wrong-type-argument (or eieio-object cl-structure-object oclosure) "") transient--exit-and-debug(error (wrong-type-argument (or eieio-object cl-structure-object oclosure) "")) eieio-oref("" key)

("")

transient--maybe-pad-keys(# #)

f(compiled-function (column) #<bytecode -0x410d23c16416aad>)(#)

mapcar(#f(compiled-function (column) #<bytecode -0x410d23c16416aad>) (# #))

f(compiled-function (group) #<bytecode -0xe794ce21a48a8c0>)(#)

apply(#f(compiled-function (group) #<bytecode -0xe794ce21a48a8c0>) #)

f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>)(#)

f(compiled-function (cl--cnm group) #<bytecode -0x483e13aa70df85f>)(#f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>) #)

apply(#f(compiled-function (cl--cnm group) #<bytecode -0x483e13aa70df85f>) #f(compiled-function (&rest args) #<bytecode 0xf004b0aa7981c77>) #)

f(compiled-function (group) "Insert GROUP's description, if any." #<bytecode 0x18caca95a8ca2031>)(#)

apply(#f(compiled-function (group) "Insert GROUP's description, if any." #<bytecode 0x18caca95a8ca2031>) # nil) transient--insert-group(#) transient--insert-groups() transient--show() transient--redisplay() transient-setup(gptel-menu) gptel-menu() funcall-interactively(gptel-menu) command-execute(gptel-menu record)

(nil "gptel-menu" nil)

ad-Advice-execute-extended-command(# nil "gptel-menu") apply(ad-Advice-execute-extended-command # (nil "gptel-menu")) execute-extended-command(nil "gptel-menu") smex-read-and-run(("toggle-debug-on-error" "gptel-menu" "package-list-packages" "gptel" "package-refresh-contents" "find-library" "gptel-send" "magit" "comment-region" "uncomment-region" "iedit-mode" "blacken-buffer" "find-grep" "org-agenda" "magit-pull" "flycheck-projectile-list-errors" "cd" "magit-blame" "python-isort-buffer" "indent-region" "eval-buffer" "magit-log" "comint-run" "pdb" "magit-checkout" "describe-variable" "sh-mode" "org-capture" "comint-send-input" "list-flycheck-errors" "dired-jump" "dired-mark" "whitespace-cleanup" "magit-file-checkout" "python-pytest-dispatch" "vterm" "version" "copy-file" "find-file" "load-theme" "sh-cd-here" "comment-box" "check-parens" "projectile-ag" "conda-env-list" "replace-string" "fortune-compile" "point-to-register" "conda-env-activate" "projectile-replace" ...)) smex() funcall-interactively(smex) command-execute(smex)

karthink commented 1 week ago

I'm aware of #361, but as far as I can tell, this is a Transient bug so I don't want to work around it in a way where I'll forget about the hack and cause trouble in the future.

If you are experiencing the error, what would really help is a minimal reproducer that combines :pad-keys t and a blank line "", so I can discuss it with tarsius, the Transient maintainer.

Something like this, which I can't confirm since I can't reproduce the bug on Transient 0.7.3.

(transient-define-prefix test-menu ()
  "Change parameters of prompt to send to the LLM."
  [:description "Test menu"
   [:pad-keys t
    ""
    "Some text"
    ("2" "Split vertically" split-window-vertically)
    ("3" "Split horizontally" split-window-horizontally)]])