您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

tool_parameter_cache.py 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import json
  2. from enum import StrEnum
  3. from json import JSONDecodeError
  4. from extensions.ext_redis import redis_client
  5. class ToolParameterCacheType(StrEnum):
  6. PARAMETER = "tool_parameter"
  7. class ToolParameterCache:
  8. def __init__(
  9. self, tenant_id: str, provider: str, tool_name: str, cache_type: ToolParameterCacheType, identity_id: str
  10. ):
  11. self.cache_key = (
  12. f"{cache_type}_secret:tenant_id:{tenant_id}:provider:{provider}:tool_name:{tool_name}"
  13. f":identity_id:{identity_id}"
  14. )
  15. def get(self) -> dict | None:
  16. """
  17. Get cached model provider credentials.
  18. :return:
  19. """
  20. cached_tool_parameter = redis_client.get(self.cache_key)
  21. if cached_tool_parameter:
  22. try:
  23. cached_tool_parameter = cached_tool_parameter.decode("utf-8")
  24. cached_tool_parameter = json.loads(cached_tool_parameter)
  25. except JSONDecodeError:
  26. return None
  27. return dict(cached_tool_parameter)
  28. else:
  29. return None
  30. def set(self, parameters: dict):
  31. """Cache model provider credentials."""
  32. redis_client.setex(self.cache_key, 86400, json.dumps(parameters))
  33. def delete(self):
  34. """
  35. Delete cached model provider credentials.
  36. :return:
  37. """
  38. redis_client.delete(self.cache_key)