tool_provider_cache.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import json
  2. from enum import Enum
  3. from json import JSONDecodeError
  4. from typing import Optional
  5. from extensions.ext_redis import redis_client
  6. class ToolProviderCredentialsCacheType(Enum):
  7. PROVIDER = "tool_provider"
  8. class ToolProviderCredentialsCache:
  9. def __init__(self, tenant_id: str, identity_id: str, cache_type: ToolProviderCredentialsCacheType):
  10. self.cache_key = f"{cache_type.value}_credentials:tenant_id:{tenant_id}:id:{identity_id}"
  11. def get(self) -> Optional[dict]:
  12. """
  13. Get cached model provider credentials.
  14. :return:
  15. """
  16. cached_provider_credentials = redis_client.get(self.cache_key)
  17. if cached_provider_credentials:
  18. try:
  19. cached_provider_credentials = cached_provider_credentials.decode('utf-8')
  20. cached_provider_credentials = json.loads(cached_provider_credentials)
  21. except JSONDecodeError:
  22. return None
  23. return cached_provider_credentials
  24. else:
  25. return None
  26. def set(self, credentials: dict) -> None:
  27. """
  28. Cache model provider credentials.
  29. :param credentials: provider credentials
  30. :return:
  31. """
  32. redis_client.setex(self.cache_key, 86400, json.dumps(credentials))
  33. def delete(self) -> None:
  34. """
  35. Delete cached model provider credentials.
  36. :return:
  37. """
  38. redis_client.delete(self.cache_key)