xiaoxx970 / chatgpt-in-terminal

Use ChatGPT in terminal
MIT License
201 stars 27 forks source link

在stream模式下让用户选择显示模式 #21

Closed xiaoxx970 closed 1 year ago

xiaoxx970 commented 1 year ago

https://rich.readthedocs.io/en/latest/live.html#vertical-overflow

当前是使用默认的ellipsis模式,当生成内容超出屏幕的时候,会在最下方显示三个小点,等所有内容生成完成的时候会一次性显示出剩余内容。这个模式在内容少的时候还好,如果内容很多,那内容超出屏幕后用户又只剩下了等待,内容越长等待越久。

当时考虑使用另一种模式:visible,这个模式能持续的flow输出答案,内容超过窗口高度的时候就向下滚动输出。这个模式能很好的解决用户的等待问题,但是缺点就是,不能在这个时候滚动屏幕,否则屏幕将快速刷新,导致屏幕外的内容彻底失控,最后只能正确显示当前屏幕的内容。

但是现在我实际使用下来,发现如果内容太长,我还是愿意不滚动屏幕,然后选择visible模式,看着所有回答慢慢出现。所以稍后打算把这个模式的选择做成/stream的子命令

Ace-Radom commented 1 year ago

感觉为了稳定应该将ellipsis设为默认比较好 但开放改为visible模式的命令感觉倒是个挺不错的更新 个人觉得有三种设计:

  1. 全部集成进 /stream 中 后设 on off ellipsis visible 四个二级控制命令 单 /stream 输出目前状态
  2. 同样全部集成 后设 ellipsis visible 二级命令 单 /stream 开关
  3. 拆成两个命令

我是觉得要有一个输出目前stream状态的命令最好 不知道你怎么看

xiaoxx970 commented 1 year ago

闲来无事来填坑了,我觉得用2.很好,马上弄一个

xiaoxx970 commented 1 year ago

噢实测我就是不滚动屏幕,在'visible'模式下,超出屏幕的部分它还是乱成一团。结果就是往上滚只能看到完整的最后一个回答,再往上就是各种最后一个回答的未完成版本。总之还是把这个功能写进去吧,如果就是只需要看最后一个回答并且不想等超出部分的话,还是用得到的

Ace-Radom commented 1 year ago

hm我不知道python的rich live是怎么实现的 没看过源码 但我自己在写的md渲染器的live就是靠ANSI擦除+覆写实现伪流式输出的 我估计python里的库优化肯定更多但应该大差不差 但这种……覆写就不可避免造成在文字坐标改变时候写错位:joy: 就看用户怎么用了

xiaoxx970 commented 1 year ago

是的估计终端下rich只能做到这样了