当前行为
在没有安装redis的环境中导入gptcache会失败(因为它没有被声明为必需的依赖项),并且无法安装(例如,只读文件系统的环境,如AWS lambda)。
import guidance
File "/var/task/guidance/__init__.py", line 7, in <module>
from ._program import Program
File "/var/task/guidance/_program.py", line 17, in <module>
from .llms import _openai
File "/var/task/guidance/llms/__init__.py", line 1, in <module>
from ._openai import OpenAI, MSALOpenAI, AzureOpenAI
File "/var/task/guidance/llms/_openai.py", line 15, in <module>
from ._llm import LLM, LLMSession, SyncSession
File "/var/task/guidance/llms/_llm.py", line 5, in <module>
from .caches import Cache, DiskCache
File "/var/task/guidance/llms/caches/__init__.py", line 3, in <module>
from ._gptcache import GPTCache
File "/var/task/guidance/llms/caches/_gptcache.py", line 8, in <module>
from gptcache.adapter.api import get, put, init_similar_cache
File "/var/task/gptcache/__init__.py", line 5, in <module>
from gptcache.core import Cache
File "/var/task/gptcache/core.py", line 7, in <module>
from gptcache.manager import get_data_manager
File "/var/task/gptcache/manager/__init__.py", line 4, in <module>
from gptcache.manager.factory import get_data_manager, manager_factory
File "/var/task/gptcache/manager/factory.py", line 6, in <module>
from gptcache.manager.data_manager import SSDataManager, MapDataManager
File "/var/task/gptcache/manager/data_manager.py", line 10, in <module>
from gptcache.manager.eviction.distributed_cache import NoOpEviction
File "/var/task/gptcache/manager/eviction/distributed_cache.py", line 8, in <module>
import_redis()
File "/var/task/gptcache/utils/__init__.py", line 260, in import_redis
_check_library("redis")
File "/var/task/gptcache/utils/__init__.py", line 59, in _check_library
prompt_install(package if package else libname)
File "/var/task/gptcache/utils/dependency_control.py", line 20, in prompt_install
raise PipInstallError(package) from e
Could not install packages due to an OSError: [Errno 30] Read-only file system: '/home/sbx_user1051'
预期行为
gptcache不应该代表用户安装软件包。
强制性软件包应该在requirements.txt/setup.py中声明,可选功能只有在这些软件包可用时才启用,如果在没有所需软件包的情况下尝试使用该功能,将在运行时引发错误。
重现步骤
Create an AWS lambda function that declares gptcache as a dependency.
In the handler import gptcache.
Trigger the lamdba.
环境
AWS Lambda
其他事项?
- 无响应*
6条答案
按热度按时间gdx19jrr1#
@a9raag 有机会合并 @leio10 的 pr 来修复这个问题吗?
afdcj2ne2#
@marioluan 我已经将其合并到开发分支。
p1tboqfb3#
感谢@SimFG!❤️
为了彻底解决这个问题,我们需要发布这个更改。你计划近期发布一个新版本吗?😬
uujelgoq4#
这是因为
NoOpEviction
类是从具有RedisEviction
实现的distributed_cahe
模块中导入的。为了避免这种情况,我已经创建了一个PR,将RedisEviction放入一个单独的模块中。r1zk6ea15#
你好@a9raag!
我在这里寻找解决这个问题的方法,所以我猜它仍然没有解决。😞
我对这个项目没有太多的上下文,但是检查代码后,我认为问题出在这一行,我们导入了
RedisCacheStorage
类,同时也加载了模块并尝试安装redis。由于类只是为了检查一个条件而被加载,是否有可能改变这个条件以避免在最顶层导入类?我不知道是否可以找到另一种方法来决定条件是否为真,或者先检查
eviction_manager == "redis"
,然后再导入类来检查条件中的其他部分。谢谢!
d5vmydt96#
@a9raag 我已经创建了这个PR,试图解决这个问题。因为
scalar
是给CacheBase
类分配的名称,以决定它应该示例化哪个类,我认为检查它是等效的,但在不加载类的情况下。但是我无法测试它,你认为呢?它能工作吗?