| 
														
															@@ -12,6 +12,7 @@ from google.generativeai.types import (File, GenerateContentResponse, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                                        HarmBlockThreshold, HarmCategory) 
														 | 
														
														 | 
														
															                                        HarmBlockThreshold, HarmCategory) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from loguru import logger 
														 | 
														
														 | 
														
															 from loguru import logger 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+from common.aliyun_log import AliyunLogger 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from common.common_log import Common 
														 | 
														
														 | 
														
															 from common.common_log import Common 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from common.feishu_data import Material 
														 | 
														
														 | 
														
															 from common.feishu_data import Material 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from common.redis import SyncRedisHelper 
														 | 
														
														 | 
														
															 from common.redis import SyncRedisHelper 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -97,7 +98,7 @@ def download_video(video_link: str) -> Optional[str]: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return 
														 | 
														
														 | 
														
															     return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def upload_video(video_path: str) -> Optional[Tuple[File, str]]: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def upload_video(video_path: str, redis_task) -> Optional[Tuple[File, str]]: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     try: 
														 | 
														
														 | 
														
															     try: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         file = genai.upload_file(path=video_path) 
														 | 
														
														 | 
														
															         file = genai.upload_file(path=video_path) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         while True: 
														 | 
														
														 | 
														
															         while True: 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -107,11 +108,13 @@ def upload_video(video_path: str) -> Optional[Tuple[File, str]]: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             else: 
														 | 
														
														 | 
														
															             else: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 return file, file.state.name 
														 | 
														
														 | 
														
															                 return file, file.state.name 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     except Exception as e: 
														 | 
														
														 | 
														
															     except Exception as e: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        AliyunLogger.logging( str( redis_task['video_id'] ), redis_task['title'], redis_task['video_path'], '', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                             redis_task['type'], redis_task['partition'], f"[+] 上传视频失败: {e}" ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error(f'[+] 上传视频失败: {e}') 
														 | 
														
														 | 
														
															         logger.error(f'[+] 上传视频失败: {e}') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def create_model_cache() -> Optional[genai.GenerativeModel]: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def create_model_cache(redis_task) -> Optional[genai.GenerativeModel]: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     try: 
														 | 
														
														 | 
														
															     try: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         model = genai.GenerativeModel( 
														 | 
														
														 | 
														
															         model = genai.GenerativeModel( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             model_name='gemini-1.5-flash', 
														 | 
														
														 | 
														
															             model_name='gemini-1.5-flash', 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -121,12 +124,14 @@ def create_model_cache() -> Optional[genai.GenerativeModel]: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.info('[+] 创建缓存模型成功') 
														 | 
														
														 | 
														
															         logger.info('[+] 创建缓存模型成功') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return model 
														 | 
														
														 | 
														
															         return model 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     except Exception as e: 
														 | 
														
														 | 
														
															     except Exception as e: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        AliyunLogger.logging( str( redis_task['video_id'] ), redis_task['title'], redis_task['video_path'], '', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                              redis_task['type'], redis_task['partition'], f"[+] 视频创建缓存内容,并返回生成模型异常信息: {e}" ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error(f'视频创建缓存内容,并返回生成模型异常信息: {e}') 
														 | 
														
														 | 
														
															         logger.error(f'视频创建缓存内容,并返回生成模型异常信息: {e}') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         Common.logger('ai').info(f'视频创建缓存内容,并返回生成模型异常信息: {e}') 
														 | 
														
														 | 
														
															         Common.logger('ai').info(f'视频创建缓存内容,并返回生成模型异常信息: {e}') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def analyze_video(model: genai.GenerativeModel, google_file: File, prompt: str) -> Optional[GenerateContentResponse]: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def analyze_video(model: genai.GenerativeModel, google_file: File, prompt: str, redis_task) -> Optional[GenerateContentResponse]: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     try: 
														 | 
														
														 | 
														
															     try: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         session = model.start_chat(history=[]) 
														 | 
														
														 | 
														
															         session = model.start_chat(history=[]) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         content = { 
														 | 
														
														 | 
														
															         content = { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -137,8 +142,11 @@ def analyze_video(model: genai.GenerativeModel, google_file: File, prompt: str) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return session.send_message(content=content) 
														 | 
														
														 | 
														
															         return session.send_message(content=content) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     except Exception as e: 
														 | 
														
														 | 
														
															     except Exception as e: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        AliyunLogger.logging( str( redis_task['video_id'] ), redis_task['title'], redis_task['video_path'], '', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                              redis_task['type'], redis_task['partition'], f"[+] 视频处理请求失败: {e}" ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error(f'视频处理请求失败: {e}') 
														 | 
														
														 | 
														
															         logger.error(f'视频处理请求失败: {e}') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         Common.logger('ai').info(f'视频处理请求失败: {e}') 
														 | 
														
														 | 
														
															         Common.logger('ai').info(f'视频处理请求失败: {e}') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -156,35 +164,40 @@ def run(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         time.sleep(10) 
														 | 
														
														 | 
														
															         time.sleep(10) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     redis_task = json.loads(redis_task) 
														 | 
														
														 | 
														
															     redis_task = json.loads(redis_task) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     mark, prompt = Material.feishu_list() 
														 | 
														
														 | 
														
															     mark, prompt = Material.feishu_list() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     video_duration = get_video_duration(video_link=redis_task['video_path']) 
														 | 
														
														 | 
														
															     video_duration = get_video_duration(video_link=redis_task['video_path']) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if not video_duration: 
														 | 
														
														 | 
														
															     if not video_duration: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        AliyunLogger.logging( str( redis_task['video_id'] ), redis_task['title'], redis_task['video_path'], "", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                              redis_task['type'], redis_task['partition'], "[+] 获取视频时长失败, 跳过任务" ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error('[+] 获取视频时长失败, 跳过任务') 
														 | 
														
														 | 
														
															         logger.error('[+] 获取视频时长失败, 跳过任务') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     elif video_duration >= 600: 
														 | 
														
														 | 
														
															     elif video_duration >= 600: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        AliyunLogger.logging( str( redis_task['video_id'] ), redis_task['title'], redis_task['video_path'], "", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                              redis_task['type'], redis_task['partition'], "[+] 视频时长超过10分钟, 跳过任务" ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error('[+] 视频时长超过10分钟, 跳过任务') 
														 | 
														
														 | 
														
															         logger.error('[+] 视频时长超过10分钟, 跳过任务') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     video_path = download_video(video_link=redis_task['video_path']) 
														 | 
														
														 | 
														
															     video_path = download_video(video_link=redis_task['video_path']) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if not video_path: 
														 | 
														
														 | 
														
															     if not video_path: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        AliyunLogger.logging( str( redis_task['video_id'] ), redis_task['title'], redis_task['video_path'], "", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                              redis_task['type'], redis_task['partition'], "[+] 视频下载失败, 跳过任务" ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error(f'[+] 视频下载失败, 跳过任务') 
														 | 
														
														 | 
														
															         logger.error(f'[+] 视频下载失败, 跳过任务') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    google_file, google_file_state = upload_video(video_path=video_path) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    google_file, google_file_state = upload_video(video_path=video_path, redis_task=redis_task) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if not google_file_state: 
														 | 
														
														 | 
														
															     if not google_file_state: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     elif google_file_state != 'ACTIVE': 
														 | 
														
														 | 
														
															     elif google_file_state != 'ACTIVE': 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error('[+] 视频上传状态不为 ACTIVE, 跳过任务') 
														 | 
														
														 | 
														
															         logger.error('[+] 视频上传状态不为 ACTIVE, 跳过任务') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    model = create_model_cache() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    model = create_model_cache(redis_task=redis_task) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if isinstance(model, str): 
														 | 
														
														 | 
														
															     if isinstance(model, str): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error('[+] 创建模型失败, 跳过任务') 
														 | 
														
														 | 
														
															         logger.error('[+] 创建模型失败, 跳过任务') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    response = analyze_video(model=model, google_file=google_file, prompt=prompt) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    response = analyze_video(model=model, google_file=google_file, prompt=prompt, redis_task=redis_task) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if isinstance(response, str): 
														 | 
														
														 | 
														
															     if isinstance(response, str): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         logger.error('[+] 获取模型响应失败, 跳过任务') 
														 | 
														
														 | 
														
															         logger.error('[+] 获取模型响应失败, 跳过任务') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return 
														 | 
														
														 | 
														
															         return 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -192,6 +205,7 @@ def run(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     usage_info, text = str(response.usage_metadata).replace('\n', ', '), response.text.strip() 
														 | 
														
														 | 
														
															     usage_info, text = str(response.usage_metadata).replace('\n', ', '), response.text.strip() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     logger.info(f'[+] 使用情况: {usage_info}') 
														 | 
														
														 | 
														
															     logger.info(f'[+] 使用情况: {usage_info}') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     logger.info(f'[+] 模型响应结果: {text}') 
														 | 
														
														 | 
														
															     logger.info(f'[+] 模型响应结果: {text}') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    AliyunLogger.logging( str( redis_task['video_id'] ), redis_task['title'], redis_task['video_path'], mark, redis_task['type'], redis_task['partition'], text ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     genai.delete_file(google_file) 
														 | 
														
														 | 
														
															     genai.delete_file(google_file) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 |