mind-wave -- 基于ChatGPT API的Emacs AI插件

感觉这里namespace杀鸡用牛刀了呀,设置一个http_proxy环境变量就可以了,所有子进程也能继承这个环境变量,proxy-ns跟设env比起来,优点在哪里呢?

比如golang这种静态编译的, yay这些包管理, git ssh/https 干扰太大, 等等。

我一开始也是觉得杀鸡用牛刀, 但是 namespace 用起来是真的香, 我用了 proxy-ns 以后, 本地配置好链接 vps 的 socks5 以后, 整个系统只有三种代理:

  1. 浏览器基于规则的代理
  2. Emacs默认启动 proxy-ns , 这样我把所有需要设置代理的地方全部都删除了
  3. 终端偶尔要用的时候, 就加一个 proxy-ns 前缀

这个牛刀节省了我大量配置各种Emacs插件代理的时间和保证所有语言和工具都可以直接走代理, 用过牛刀就再也不想杀鸡了, 哈哈哈哈。

2 个赞

tun 不香么 :laughing:

In chat buffer with following content:

------ User ------
what is reverse function of encode-codi
Exception in thread Thread-4 (chat_ask):
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/path/to/manateelazycat/mind-wave/mind_wave.py", line 140, in chat_ask
    content = self.chat_parse_content(buffer_content)
  File "/path/to/manateelazycat/mind-wave/mind_wave.py", line 156, in chat_parse_content
    text = base64.b64decode(buffer_content).decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd7 in position 57: invalid continuation byte
(let ((s "------ User ------\nwhat is reverse function of encode-codi"))
  (base64-encode-string
   (encode-coding-string s 'utf-8)))

;; "LS0tLS0tIFVzZXIgLS0tLS0tCndoYXQgaXMgcmV2ZXJzZSBmdW5jdGlvbiBvZiBlbmNvZGUtY29k\naQ=="

emacs base64-encode-string 为什么有换行符"\n"出现? :blush: :blush: 然后 python b64decode 失败了? 然而问题并不在这 :hugs:

> base64.b64decode('Y\nW\nJj\n')
b'abc'
> base64.b64decode('Y\nW\nJj\n') == base64.b64decode(b'YWJj')
True
> '\12' == '\n'
True

when mind-wave error, show explicit complain instead of silently continue.

sometimes it work, sometimes not work, I thought it was network issue until I come across buffer mind-wave content:

Add logging here:

def chat_parse_content(self, buffer_content):
    with open("/tmp/buffer_content.txt", "a") as f:
        print("repr:", repr(buffer_content), file=f)

    text = base64.b64decode(buffer_content).decode("utf-8")
repr: 'LS0tLS0tIFVzZXIgLS0tLS0tCndoYXQgaXMgcmV2ZXJzZSBmdW5jdGlvbiBvZiBlbmNvZGUtY29k\\12aQ=='

发现 emacs 换行符 “\n” 变成 python \\12 而不是 \12, 多了一个 \, 所以 python b64decode 失败

这个真的香吗,有没有可能,有些人不知道代理是啥(因为不需要),都是直连,本站大部分人(包括我),应该都不知道可直连想去的地方是什么感觉

果然这种好用的东西,在 macOS 都是不存在的,从网络层面把代理配置好,可太省心了,不用操心应用怎么配置代理,是否接受 http proxy 环境变量之类的

把代理塞到python里就能用了,刚开始也不懂为啥连不上,走的全局代理

修改 mind_wave.py 文件

import os
os.environ["http_proxy"]="http://127.0.0.1:1080"
os.environ["https_proxy"]="http://127.0.0.1:1080"

这种方式可能比较粗暴 :rofl:

2 个赞

给重现方式吧

可以发个补丁

我建议不要改代码了,可以在readme写两句 如果是海外用户就是直连了 如果是国内用户会用肯定看的懂,不会用代理也没办法的

  • mind-wave-adjust-text
  • mind-wave-translate-to-english
  • mind-wave-proofreading-doc

这三个命令改成 stream 模式了, 命令执行后, 马上就可以在现在的buffer中输出内容, 易用性更好一点。

新增 mind-wave-generate-code 命令, 根据用户提示自动把代码插入到Emacs正在编辑的文件内, 自然语言抄代码, 哈哈哈哈。

4 个赞

试了两个key,都报这个错,不知道各位遇到过没

[Mind-Wave] Traceback (most recent call last):
  File "/Users/ning/.emacs.d/.local/straight/build-30.0.50/mind-wave/mind_wave.py", line 36, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ning/.emacs.d/.local/straight/build-30.0.50/mind-wave/mind_wave.py", line 128, in send_stream_request
    response = openai.ChatCompletion.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/openai/api_resources/chat_completion.py", line 25, in create
    return super().create(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create
    response, _, api_key = requestor.request(
                           ^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/openai/api_requestor.py", line 226, in request
    resp, got_stream = self._interpret_response(result, stream)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/openai/api_requestor.py", line 620, in _interpret_response
    self._interpret_response_line(
  File "/opt/homebrew/lib/python3.11/site-packages/openai/api_requestor.py", line 683, in _interpret_response_line
    raise self.handle_error_response(
openai.error.AuthenticationError: Incorrect API key provided: /Users/n************************************.txt. You can find your API key at https://platform.openai.com/account/api-keys.

user-error: Minibuffer is inactive

我的没问题。我 API 文件长这样, 以 sk- 开头:

image

或者去官网重新生成一个新 api token 试试?

这个就是你的key不对,key是买的,还是网上抄的?

官网生成的,试了两个

有费用余额吗?

我把存放key的文件放到/tmp下面可以了,可能路径的问题,我再试几个地方

为啥不放在readme要求的路径?

放在.doom.d下面似乎有点问题,随他去了。我定制放在.emacs.d/.local/mind-wave下面了

1 个赞