From 91ebad57c6649b288cdca180049c3cb0ff6b38d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=B7=E5=AE=87=E4=BD=B3?= Date: Fri, 13 Jun 2025 17:15:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Merge branch 'main' into feature/modal-cluster-gemini * ADD 增加大模型输出错误时间值的处理 * Merge branch 'main' into feature/modal-cluster-gemini * FIX 修复推理问题 * Merge branch 'main' into feature/modal-cluster-gemini * FIX 修复拼接网格图的异步失效问题 * FIX 修复拼接网格图的异步失效问题 * Merge branch 'main' into feature/modal-cluster-gemini * Merge branch 'main' into feature/modal-cluster-gemini * FIX 调高合成网格图容器配置 * Merge branch 'main' into feature/modal-cluster-gemini * FIX 修复带图片模态推理接口 * PERF 优化Gemini Prompt词 * Merge remote-tracking branch 'origin/main' into feature/modal-cluster-gemini * ADD 增加网格图片创建接口 ADD gemini推理打点增加商品封面模态 PERF gemini打点结果相邻时间线同商品合并 * Merge branch 'main' into feature/modal-cluster-gemini * FIX 429重试机制 * FIX 修复Gemini推理函数入参 * Merge branch 'main' into feature/modal-cluster-gemini * PERF gemini修改参数类型 ADD 增加批量删除Gemini文件接口 * PERF gemini修改prompt * Merge branch 'feature/modal-cluster' into feature/modal-cluster-gemini * PERF gemini修改prompt * 录制HLS时 结果复制到S3挂载点增加一个fallback处理 * Merge branch 'feature/modal-cluster' into feature/modal-cluster-gemini * PERF gemini修改prompt * PERF gemini增加图像模态 * PERF gemini增加图像模态 * fix : TikHub的Logger换为Loguru * fix : 修复直播切分视频接口 * Merge branch 'feature/modal-cluster' into feature/modal-cluster-gemini * PERF tikhub接口增加随机延迟 * Merge remote-tracking branch 'origin/feature/modal-cluster' into feature/modal-cluster * 合并分支 * fix : hls录制缓存读写问题 * FIX 修改冲突 * ADD 增加获取直播间指定商品数量接口 * Merge branch 'feature/modal-cluster' into feature/modal-cluster-gemini * PERF 修改tikhub到aws * fix : 增加s3分片上传接口 * PERF Gemini推理直接从参数列表获取商品列表 ADD Tikhub增加获取置顶|讲解中商品接口 * PERF Gemini推理直接从参数获取商品列表 * Merge branch 'feature/modal-cluster' into feature/modal-cluster-gemini * fix 处理jpg图片的codec_name应为mjpg * Merge branch 'feature/modal-cluster' into feature/modal-cluster-gemini * PERF 优化返回值 * fix 获取媒体metadata的类型报错,modal client升级到1.0.2 * Merge branch 'feature/modal-cluster' into feature/modal-cluster-gemini * PERF 风控后爬虫直接退出避免cookie失效 PERF 分离tikhub api, 使用更低的保持时间以更换IP FIX 修复Dict键不存在报错的bug * fix 一些webhook相关的bug,添加了更详细的接口说明 * 更新直播录制为可跳转时间的hls流接口,用于替代掉腾讯VOD+火山云拉流转推,片段保证每片开头为关键帧,时间精度准确到毫秒级 * ADD 增加直播间商品增量缓存触发器 * Merge branch 'feature/modal-cluster' into feature/modal-cluster-gemini * PERF 调整gemini prompt * - KVCache类改为可拓展,基于环境变量设置KV space - test 环境配置与CF测试环境对齐 * FIX 修复Gemini推理视频切条的问题 PERF 优化视频切条函数性能 * ADD 基本完成gemini视频推理API * ADD 添加内联的tikhub * 对齐预发环境 --------- Merge request URL: https://g-ldyi2063.coding.net/p/dev/d/modalDeploy/git/merge/4802 Co-authored-by: 康宇佳,shuohigh@gmail.com --- src/BowongModalFunctions/utils/TimeUtils.py | 33 +++++++++++++++++++-- src/cluster/video_apps/cache_submit.py | 18 +++-------- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/BowongModalFunctions/utils/TimeUtils.py b/src/BowongModalFunctions/utils/TimeUtils.py index d2ec0be..b417f1a 100644 --- a/src/BowongModalFunctions/utils/TimeUtils.py +++ b/src/BowongModalFunctions/utils/TimeUtils.py @@ -105,8 +105,21 @@ def merge_timeline_items(items): return [format_timeline_item(start, end, activity) for start, end, activity in merged_items] -def merge_product_data(data): +def convert_time(time_str): + # 去除秒字段并转换为标准时间 + parts = time_str.split(':') + if len(parts) == 3: + new_time_str = f"00:{parts[0]}:{parts[1]}.{parts[2].split('.')[1]}" + return new_time_str + return time_str + + +def merge_product_data(data, start_time_str, end_time_str): """合并相同产品的数据""" + start_time = parse_time(start_time_str) + end_time = parse_time(end_time_str) + duration = end_time - start_time + product_dict = {} # 按产品名称分组 @@ -118,7 +131,23 @@ def merge_product_data(data): # 合并每个产品的时间线 for product in product_dict: - product_dict[product]["timeline"] = merge_timeline_items(product_dict[product]["timeline"]) + timeline = product_dict[product]["timeline"] + new_timeline = [] + for item in timeline: + start, end = parse_timeline_item(item) + # 比较起始时间与时间差 + if (start - datetime.min) > duration: + # 处理时间字符串 + start_str = format_time(start) + end_str = format_time(end) + new_start_str = convert_time(start_str) + new_end_str = convert_time(end_str) + activity = item.split(' (', 1)[1].rstrip(')') + new_item = f"{new_start_str} - {new_end_str} ({activity})" + new_timeline.append(new_item) + else: + new_timeline.append(item) + product_dict[product]["timeline"] = merge_timeline_items(new_timeline) # 返回合并后的列表 return list(product_dict.values()) \ No newline at end of file diff --git a/src/cluster/video_apps/cache_submit.py b/src/cluster/video_apps/cache_submit.py index 01e2987..6100f88 100644 --- a/src/cluster/video_apps/cache_submit.py +++ b/src/cluster/video_apps/cache_submit.py @@ -3,30 +3,20 @@ import modal from ..video import downloader_image, app, config, batch_update_cloudflare_kv, modal_kv_cache with downloader_image.imports(): - import os, httpx, crcmod, json, time, requests + import os, httpx, crcmod import sentry_sdk - from sentry_sdk.integrations.loguru import LoguruIntegration from tqdm import tqdm - from typing import Tuple, List, Dict + from typing import Tuple from loguru import logger - from datetime import datetime, UTC, timedelta, timezone + from datetime import datetime, UTC, timedelta from modal import current_function_call_id - from ffmpy import FFmpeg, FFprobe - from fastapi import HTTPException - from httpx import Timeout - from starlette import status from tencentcloud.common.credential import Credential from tencentcloud.vod.v20180717.vod_client import VodClient from tencentcloud.vod.v20180717 import models as vod_request_models - from BowongModalFunctions.config import WorkerConfig - from BowongModalFunctions.utils.KVCache import MediaSourceKVCache, LiveProductKVCache from BowongModalFunctions.models.media_model import MediaSource, MediaCacheStatus, MediaProtocol - from BowongModalFunctions.models.web_model import SentryTransactionInfo, MonitorLiveRoomProductRequest, LiveProduct, \ - LiveProductCaches, WebhookNotify - from BowongModalFunctions.models.ffmpeg_worker_model import FFMpegSliceSegment - from BowongModalFunctions.utils.TimeUtils import TimeDelta, merge_product_data + from BowongModalFunctions.models.web_model import SentryTransactionInfo @app.function(cpu=1, timeout=1800,