| 
														
															@@ -8,6 +8,7 @@ import threading 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from typing import List, Dict, Optional 
														 | 
														
														 | 
														
															 from typing import List, Dict, Optional 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from enum import Enum, auto 
														 | 
														
														 | 
														
															 from enum import Enum, auto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import logging 
														 | 
														
														 | 
														
															 import logging 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import cozepy 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from cozepy import Coze, TokenAuth, Message, ChatStatus, MessageType, JWTOAuthApp, JWTAuth 
														 | 
														
														 | 
														
															 from cozepy import Coze, TokenAuth, Message, ChatStatus, MessageType, JWTOAuthApp, JWTAuth 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import time 
														 | 
														
														 | 
														
															 import time 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -22,6 +23,24 @@ class ChatServiceType(Enum): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     OPENAI_COMPATIBLE = auto 
														 | 
														
														 | 
														
															     OPENAI_COMPATIBLE = auto 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     COZE_CHAT = auto() 
														 | 
														
														 | 
														
															     COZE_CHAT = auto() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+class CrossAccountJWTOAuthApp(JWTOAuthApp): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def __init__(self, account_id: str, client_id: str, private_key: str, public_key_id: str, base_url): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.account_id = account_id 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        super().__init__(client_id, private_key, public_key_id, base_url) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def get_access_token( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            self, ttl: int = 900, scope: Optional[cozepy.Scope] = None, session_name: Optional[str] = None 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    ) -> cozepy.OAuthToken: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        jwt_token = self._gen_jwt(self._public_key_id, self._private_key, 3600, session_name) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        url = f"{self._base_url}/api/permission/oauth2/account/{self.account_id}/token" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        headers = {"Authorization": f"Bearer {jwt_token}"} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        body = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            "duration_seconds": ttl, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            "scope": scope.model_dump() if scope else None, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        return self._requester.request("post", url, False, cozepy.OAuthToken, headers=headers, body=body) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 class CozeChat: 
														 | 
														
														 | 
														
															 class CozeChat: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def __init__(self, base_url: str, auth_token: Optional[str] = None, auth_app: Optional[JWTOAuthApp] = None): 
														 | 
														
														 | 
														
															     def __init__(self, base_url: str, auth_token: Optional[str] = None, auth_app: Optional[JWTOAuthApp] = None): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if not auth_token and not auth_app: 
														 | 
														
														 | 
														
															         if not auth_token and not auth_app: 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -59,17 +78,26 @@ class CozeChat: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 self.auth_app.get_access_token(ttl=12*3600) 
														 | 
														
														 | 
														
															                 self.auth_app.get_access_token(ttl=12*3600) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @staticmethod 
														 | 
														
														 | 
														
															     @staticmethod 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    def get_oauth_app(client_id, private_key_path, public_key_id, base_url=None) -> JWTOAuthApp: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def get_oauth_app(client_id, private_key_path, public_key_id, base_url=None, account_id=None) -> JWTOAuthApp: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if not base_url: 
														 | 
														
														 | 
														
															         if not base_url: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             base_url = COZE_CN_BASE_URL 
														 | 
														
														 | 
														
															             base_url = COZE_CN_BASE_URL 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         with open(private_key_path, "r") as f: 
														 | 
														
														 | 
														
															         with open(private_key_path, "r") as f: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             private_key = f.read() 
														 | 
														
														 | 
														
															             private_key = f.read() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        jwt_oauth_app = JWTOAuthApp( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            client_id=str(client_id), 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            private_key=private_key, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            public_key_id=public_key_id, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            base_url=base_url, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        ) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if not account_id: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            jwt_oauth_app = JWTOAuthApp( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                client_id=str(client_id), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                private_key=private_key, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                public_key_id=public_key_id, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                base_url=base_url, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        else: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            jwt_oauth_app = CrossAccountJWTOAuthApp( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                account_id=account_id, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                client_id=str(client_id), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                private_key=private_key, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                public_key_id=public_key_id, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                base_url=base_url, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return jwt_oauth_app 
														 | 
														
														 | 
														
															         return jwt_oauth_app 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 if __name__ == '__main__': 
														 | 
														
														 | 
														
															 if __name__ == '__main__': 
														 |