gpt_academic icon indicating copy to clipboard operation
gpt_academic copied to clipboard

[Bug]: 使用gemini API载入历史存档后显示 `Resource has been exhausted (e.g. check quota).`

Open RonghaiHe opened this issue 1 year ago • 3 comments

Installation Method | 安装方法与平台

Pip Install (I used latest requirements.txt)

Version | 版本

Latest | 最新版

OS | 操作系统

Linux

Describe the bug | 简述

如题,用的是gemini的API,不载入历史存档能够顺利对话,载入历史存档后界面显示 Resource has been exhausted (e.g. check quota).。终端的显示见下方(路径信息中包含个人信息部分使用 xxx 代替)。 查询gemini API的配额(quota),并没有超出当日限制(只用了一两次,测试不载入历史存档能否顺利对话,验证了不是网络的问题)。

Screen Shot | 有帮助的截图

Terminal Traceback & Material to Help Reproduce Bugs | 终端traceback(如有) + 帮助我们复现的测试材料样本(如有)

Traceback (most recent call last): File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/gradio/routes.py", line 422, in run_predict output = await app.get_blocks().process_api( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/gradio/blocks.py", line 1323, in process_api result = await self.call_function( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/gradio/blocks.py", line 1067, in call_function prediction = await utils.async_iteration(iterator) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/gradio/utils.py", line 336, in async_iteration return await iterator.anext() ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/gradio/utils.py", line 329, in anext return await anyio.to_thread.run_sync( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/anyio/to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2144, in run_sync_in_worker_thread return await future ^^^^^^^^^^^^ File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 851, in run result = context.run(func, *args) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/xxx/miniconda3/envs/gptac/lib/python3.11/site-packages/gradio/utils.py", line 312, in run_sync_iterator_async return next(iterator) ^^^^^^^^^^^^^^ File "/xxx/gpt_academic/toolbox.py", line 128, in decorated yield from f(txt_passon, llm_kwargs, plugin_kwargs, chatbot_with_cookie, history, system_prompt, *args) File "/xxx/gpt_academic/request_llms/bridge_all.py", line 1053, in predict yield from method(inputs, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, stream, additional_fn) File "/xxx/gpt_academic/request_llms/bridge_google_gemini.py", line 108, in predict raise RuntimeError('对话错误') RuntimeError: 对话错误

RonghaiHe avatar May 28 '24 13:05 RonghaiHe

btw,存档的对话历史是使用 3.74 版本的对话,现在载入用的是最新的 3.76 版本

RonghaiHe avatar May 28 '24 13:05 RonghaiHe

感觉是一次性发送到llm,导致token数过大?因为调用了其他API,反映token数超过限制

RonghaiHe avatar May 28 '24 14:05 RonghaiHe

原因在于,解析项目代码是分开每个线程解析的,彼此独立,没有上下文关联,只是显示出来是有次序的。读取历史记录后,这些对话就变成了有次序的上下文了,一并传过去就会出问题。

实际上,这暴露了2个问题,除了一次性发送多个对话导致token超过限制外,解析项目代码部分并没有耦合多个代码,只是彼此分开。因此,当读到项目中一个文件调用了项目中另一个文件的函数时,只能根据注释或者函数名称推断其作用

RonghaiHe avatar Sep 05 '24 14:09 RonghaiHe