From daf0f8377b5670416751f5cc03352181a78a1d68 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Fri, 21 Aug 2026 11:43:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(fam-edge):=20=E4=B8=8A=E4=BC=A0=E7=AB=AF?= =?UTF-8?q?=E7=82=B9=E4=B8=8E=E7=AD=BE=E5=90=8D=E4=BF=AE=E6=AD=A3=20-=20Ge?= =?UTF-8?q?mini=20=E4=B8=8A=E4=BC=A0=E6=94=B9=E7=94=A8=20/upload/v1beta/fi?= =?UTF-8?q?les=20=E7=AB=AF=E7=82=B9=EF=BC=88=E5=8E=9F=20/v1beta/files=20?= =?UTF-8?q?=E9=9D=9E=E4=B8=8A=E4=BC=A0=E7=AB=AF=E7=82=B9=EF=BC=89=EF=BC=9B?= =?UTF-8?q?NVIDIA=20PUT=20=E7=94=A8=E5=85=A8=E5=B0=8F=E5=86=99=20content-t?= =?UTF-8?q?ype=20=E5=A4=B4=EF=BC=88S3=20=E9=A2=84=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fam-edge/src/fam_edge/model_adapters/gemini_adapter.py | 3 ++- fam-edge/src/fam_edge/model_adapters/nvidia_adapter.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/fam-edge/src/fam_edge/model_adapters/gemini_adapter.py b/fam-edge/src/fam_edge/model_adapters/gemini_adapter.py index 9efe515..6cfb2a1 100644 --- a/fam-edge/src/fam_edge/model_adapters/gemini_adapter.py +++ b/fam-edge/src/fam_edge/model_adapters/gemini_adapter.py @@ -126,7 +126,8 @@ class GeminiAdapter(BaseModelAdapter): name = os.path.basename(video_path) size = os.path.getsize(video_path) upload_timeout = max(self.timeout, 900) - base = f"{self._base_url}/files?key={self.api_key}" + # 上传端点必须是 /upload/v1beta/files(/v1beta/files 只是元数据端点,不接受上传协议) + base = f"https://generativelanguage.googleapis.com/upload/v1beta/files?key={self.api_key}" # 1) 创建可续传上传会话 try: r0 = requests.post( diff --git a/fam-edge/src/fam_edge/model_adapters/nvidia_adapter.py b/fam-edge/src/fam_edge/model_adapters/nvidia_adapter.py index 113d79c..5a4209b 100644 --- a/fam-edge/src/fam_edge/model_adapters/nvidia_adapter.py +++ b/fam-edge/src/fam_edge/model_adapters/nvidia_adapter.py @@ -106,7 +106,9 @@ class NvidiaVisionAdapter(BaseModelAdapter): up = requests.put( upload_url, data=f, - headers={"Content-Type": "application/octet-stream"}, + # 注意:必须用小写 header 名,预签名 S3 URL 的签名覆盖小写 content-type + headers={"content-type": "application/octet-stream", + "x-amz-meta-nvcf-asset-description": "fam-edge video asset"}, timeout=upload_timeout, ) except requests.Timeout: