11import re
2+ from datetime import datetime , timezone
23
34from symphony .bdk .core .auth .auth_session import AuthSession
5+ from symphony .bdk .core .auth .jwt_helper import generate_expiration_time
46from symphony .bdk .core .config .model .bdk_retry_config import BdkRetryConfig
57from symphony .bdk .core .retry import retry
68from symphony .bdk .gen .agent_api .signals_api import SignalsApi
@@ -19,12 +21,29 @@ class AgentVersionService:
1921 def __init__ (self , signals_api : SignalsApi , retry_config : BdkRetryConfig ):
2022 self ._signals_api = signals_api
2123 self ._retry_config = retry_config
24+ self ._is_skd_supported = None
25+ self ._expire_at = - 1
2226
23- @retry
2427 async def is_skd_supported (self ) -> bool :
25- """
28+ """ AgentVersionService stores cached version flag.
29+ Caching interval is the same as in to session token caching.
30+ Once cache is expired it calls agent info api to update version.
31+
2632 :return: boolean flag if skd supported for agent
2733 """
34+ if (
35+ self ._is_skd_supported is not None
36+ and self ._expire_at
37+ > datetime .now (timezone .utc ).timestamp ()
38+ ):
39+ return self ._is_skd_supported
40+ self ._expire_at = generate_expiration_time ()
41+ self ._is_skd_supported = await self ._get_agent_skd_support ()
42+ return self ._is_skd_supported
43+
44+
45+ @retry
46+ async def _get_agent_skd_support (self ) -> bool :
2847 try :
2948 agent_info = await self ._signals_api .v1_info_get ()
3049 if not agent_info or not agent_info .version :
0 commit comments