xiaoxx970 / chatgpt-in-terminal

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

/usage command rebuild #23

Closed Ace-Radom closed 1 year ago

Ace-Radom commented 1 year ago

Done, Requires Code Review

Link Issue: #22

重构了 /usage 命令的实现 现在可以重新使用了

TO DO:

Windows版校验脚本取消了 bat写起来真的坐牢 powershell又是问题一大堆 另外这个bash脚本是否在Mac可用我不知道 只知道Git Bash和Linux都是可以的

之所以分出一个校验脚本单独写而不是直接写在源码里有两个原因

至于校验脚本的原理 就是检查API的回复里有没有 "error" 这个tag 如果有那就是出问题了 会将整个回复输出

Ace-Radom commented 1 year ago

在取得回复时加入了 error 这个key的探测 那个脚本也许可以删掉了

xiaoxx970 commented 1 year ago

脚本不在python里调用了是吧?那我等会把脚本删除了,在说明里放https://platform.openai.com/account/usage 这个链接

xiaoxx970 commented 1 year ago
image

日志记录usage_get_params变量后发现第二次循环的起始日期和结束日期不太对了

xiaoxx970 commented 1 year ago

还有就是,https://api.openai.com/dashboard/billing/subscription 这个api应该是每个月刷新的吧,如果是每月刷新的话 https://api.openai.com/dashboard/billing/usage 这个接口也不需要90天累加什么的,只要算当月的1号到31号就可以了。

Ace-Radom commented 1 year ago

脚本不在python里调用了是吧?那我等会把脚本删除了,在说明里放https://platform.openai.com/account/usage 这个链接

其实本来就没有使用 只是我一开始没有打算在python源码里加入探测 error 回复的程序 所以把这个脚本当成一个小工具一样push上来了 后来觉得不能跨平台的工具确实意义不大所以就加进python里了 现在可以删除了

日志记录usage_get_params变量后发现第二次循环的起始日期和结束日期不太对了

啊这个是我在造错误回复测试RuntimeError捕获的debug语句忘记改回去了 我一会儿改一下

https://github.com/Ace-Radom/chatgpt-in-terminal/blob/5590a3bed12871cee7708d265c2dbecf18940751/chat.py#L372

还有就是,https://api.openai.com/dashboard/billing/subscription 这个api应该是每个月刷新的吧,如果是每月刷新的话 https://api.openai.com/dashboard/billing/usage 这个接口也不需要90天累加什么的,只要算当月的1号到31号就可以了。

我不清楚 文档里没翻到 但我问ChatGPT他说根据文档他是实时刷新的

xiaoxx970 commented 1 year ago
image

刚才试了一下,上面是开始时间1月1号的,下面是我把开始时间设置成4月1号的,下面这个和官网usage页面对应上了,我就弄成计算当月的吧

Ace-Radom commented 1 year ago

这个问题貌似没那么简单……如果像我一样还在用Free Trail的话只统计当月那么会出错啊 你能用curl访问一下 /dashboard/billing/subscription 然后看一下回复嘛 里面有账单地址之类的信息 也许需要判断一下订阅套餐了

xiaoxx970 commented 1 year ago

这个问题貌似没那么简单……如果像我一样还在用Free Trail的话只统计当月那么会出错啊 你能用curl访问一下 /dashboard/billing/subscription 然后看一下回复嘛 里面有账单地址之类的信息 也许需要判断一下订阅套餐了

我的是这样的

{
  "object": "billing_subscription",
  "has_payment_method": true,
  "canceled": false,
  "canceled_at": null,
  "delinquent": null,
  "access_until": 1680307200,
  "soft_limit": 466666,
  "hard_limit": 500000,
  "system_hard_limit": 2000000,
  "soft_limit_usd": 27.999959999999998,
  "hard_limit_usd": 30.0,
  "system_hard_limit_usd": 120.0,
  "plan": {
    "title": "Pay-as-you-go",
    "id": "payg"
  },
  "account_name": "junpeng lu",
  "po_number": null,
  "billing_email": null,
  "tax_ids": null,
  "billing_address": {
    "city": "Butte",
    "line1": "1819 South Montana Street",
    "line2": null,
    "state": "MT",
    "country": "US",
    "postal_code": "59701"
  },
  "business_address": null
}
xiaoxx970 commented 1 year ago

先更新个readme,,,

Ace-Radom commented 1 year ago

虽然我的其实已经贴过了但为了方便再贴一遍吧 image

image

我看出来的可以作为参考的有

因为我还没有付过费所以对于他的收费方式不太了解 如果别的付费API只有月付那就方便了 只要不是free那就按照月统计 若是就统计全部 如果还有多月套餐或者pay-as-use的话那特判可能就多了...

xiaoxx970 commented 1 year ago

只要不是free那就按照月统计 若是就统计全部

我觉得这就够了,其他情况就不考虑了。

Ace-Radom commented 1 year ago

或者和 /tokens 一样回复两个值?一个是本月用量一个是历史总用量 毕竟用户肯定知道自己用的哪一个plan 应该看一个值就让用户自己选吧

刚刚问了下ChatGPT不同付费计划 貌似特判也没我想的那么复杂 但这个慢点考虑要不要做吧目前先不考虑了

xiaoxx970 commented 1 year ago

也可以,那就不显示Available了,只显示两个used,一个本月一个总量。不过总量是从今年的1月1号开始算的是吧,要是跨年了怎么办

Ace-Radom commented 1 year ago

额我当时让他从今年元旦开始算是因为我记得ChatGPT的模型 (也就是gpt-3.5-turbo) 的API是今年两月还是三月公布的 这个项目毕竟主旨是将ChatGPT搬进终端所以就没有考虑去算更早的类似于gpt-3之类的API的收费【这也就是为啥我在当初做多模型选择的时候也只加了gpt-4进去 别的模型都没有考虑】 所以我觉得往前跨年那没有太大必要考虑 虽然考虑也很简单 从OpenAI第一次公布API开始算起就好 只需要改一下 get_credit_usage 里的起始时间就可以了 往后跨年的话datetime会自动考虑

还有这个是你来改还是我来改(

xiaoxx970 commented 1 year ago

我来改吧,以及刚才GitHub的pull页面好像挂了,见证历史了

Ace-Radom commented 1 year ago

确实见证历史((( 进网站直接跳too long to load 然后pull跳500 头一回见(

Ace-Radom commented 1 year ago

~奇怪 我明明在仓库里看到push了为什么在PR里没有显示~

Ace-Radom commented 1 year ago

看了一下 应该基本没啥问题了 如果没别的东西的话我觉得差不多可以merge了

xiaoxx970 commented 1 year ago

可能是bug还没修完吧我也没看到所以昨晚没敢merge

Ace-Radom commented 1 year ago

怎么说呢……有一个不算问题的问题 https://github.com/xiaoxx970/chatgpt-in-terminal/blob/32b1dd3f9add2e5af0091107fbeb9e6405cb3e13/chat.py#L380-L387 https://github.com/xiaoxx970/chatgpt-in-terminal/blob/32b1dd3f9add2e5af0091107fbeb9e6405cb3e13/chat.py#L389-L398 在L384和L396之后没有return真的没事嘛 我没有太看懂

xiaoxx970 commented 1 year ago

是不用return的,因为它的作用比如fetch_credit_total_granted,就是得到response_subscription_json里的"hard_limit_usd"然后赋值给self.credit_total_granted,赋值结束了它的任务就完成了,之后要调用它的结果直接用self.credit_total_granted就可以了,下面这个也是一样的道理

Ace-Radom commented 1 year ago

啊好的我明白了