diff --git a/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py b/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py
index 281122364be..e9908d926fb 100644
--- a/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py
+++ b/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py
@@ -59,7 +59,9 @@ def execute(self, model_id, prompt, negative_prompt, dialogue_number, dialogue_t
if isinstance(image_url, str):
if image_url.startswith('http'):
# HTTP URL 情况
- image_url = requests.get(image_url).content
+ res = requests.get(image_url)
+ res.raise_for_status()
+ image_url = res.content
elif image_url.startswith('data:image'):
# Data URL 格式 (data:image/png;base64,...)
import base64
diff --git a/apps/application/flow/step_node/image_to_video_step_node/impl/base_image_to_video_node.py b/apps/application/flow/step_node/image_to_video_step_node/impl/base_image_to_video_node.py
index 97acad76337..ea2645a9252 100644
--- a/apps/application/flow/step_node/image_to_video_step_node/impl/base_image_to_video_node.py
+++ b/apps/application/flow/step_node/image_to_video_step_node/impl/base_image_to_video_node.py
@@ -59,14 +59,16 @@ def execute(self, model_id, prompt, negative_prompt, dialogue_number, dialogue_t
# 判断是不是 url
first_frame_url = self.get_file_base64(first_frame_url)
last_frame_url = self.get_file_base64(last_frame_url)
- video_urls = ttv_model.generate_video(question, negative_prompt, first_frame_url, last_frame_url)
+ video_url = ttv_model.generate_video(question, negative_prompt, first_frame_url, last_frame_url)
# 保存图片
- if video_urls is None or video_urls == '':
+ if video_url is None or video_url == '':
return NodeResult({'answer': gettext('Failed to generate video')}, {})
file_name = 'generated_video.mp4'
- if isinstance(video_urls, str) and video_urls.startswith('http'):
- video_urls = requests.get(video_urls).content
- file = bytes_to_uploaded_file(video_urls, file_name)
+ if isinstance(video_url, str) and video_url.startswith('http'):
+ res = requests.get(video_url)
+ res.raise_for_status()
+ video_url = res.content
+ file = bytes_to_uploaded_file(video_url, file_name)
file_url = self.upload_file(file)
video_label = f''
video_list = [{'file_id': file_url.split('/')[-1], 'file_name': file_name, 'url': file_url}]
diff --git a/apps/application/flow/step_node/text_to_video_step_node/impl/base_text_to_video_node.py b/apps/application/flow/step_node/text_to_video_step_node/impl/base_text_to_video_node.py
index fd4ae5ad2f3..2afc9663f62 100644
--- a/apps/application/flow/step_node/text_to_video_step_node/impl/base_text_to_video_node.py
+++ b/apps/application/flow/step_node/text_to_video_step_node/impl/base_text_to_video_node.py
@@ -53,14 +53,16 @@ def execute(self, model_id, prompt, negative_prompt, dialogue_number, dialogue_t
self.context['message_list'] = message_list
self.context['dialogue_type'] = dialogue_type
self.context['negative_prompt'] = self.generate_prompt_question(negative_prompt)
- video_urls = ttv_model.generate_video(question, negative_prompt)
+ video_url = ttv_model.generate_video(question, negative_prompt)
# 保存图片
- if video_urls is None:
+ if video_url is None:
return NodeResult({'answer': gettext('Failed to generate video')}, {})
file_name = 'generated_video.mp4'
- if isinstance(video_urls, str) and video_urls.startswith('http'):
- video_urls = requests.get(video_urls).content
- file = bytes_to_uploaded_file(video_urls, file_name)
+ if isinstance(video_url, str) and video_url.startswith('http'):
+ res = requests.get(video_url)
+ res.raise_for_status()
+ video_url = res.content
+ file = bytes_to_uploaded_file(video_url, file_name)
file_url = self.upload_file(file)
video_label = f''
video_list = [{'file_id': file_url.split('/')[-1], 'file_name': file_name, 'url': file_url}]
diff --git a/apps/application/serializers/application.py b/apps/application/serializers/application.py
index 7a501f0e743..cad4a117857 100644
--- a/apps/application/serializers/application.py
+++ b/apps/application/serializers/application.py
@@ -526,6 +526,7 @@ def insert_template_workflow(self, instance: Dict):
raise AppApiException(500, _("Illegal download url"))
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
app = ApplicationSerializer(
data={'user_id': self.data.get('user_id'), 'workspace_id': self.data.get('workspace_id')}
).import_({
@@ -544,7 +545,7 @@ def insert_template_workflow(self, instance: Dict):
work_flow=work_flow
)
try:
- requests.get(work_flow_template.get('downloadCallbackUrl'), timeout=5)
+ requests.get(work_flow_template.get('downloadCallbackUrl'), timeout=5).raise_for_status()
except Exception as e:
maxkb_logger.error(f"callback appstore tool download error: {e}")
return app
@@ -1148,6 +1149,7 @@ def update_template_workflow(self, instance: Dict, app: Application):
raise AppApiException(500, _("Illegal download url"))
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
try:
mk_instance = restricted_loads(res.content)
except Exception as e:
@@ -1197,7 +1199,7 @@ def update_template_workflow(self, instance: Dict, app: Application):
'auth_target_type': AuthTargetType.TOOL.value
}).auth_resource_batch([t.id for t in tool_model_list])
try:
- requests.get(work_flow_template.get('downloadCallbackUrl'), timeout=5)
+ requests.get(work_flow_template.get('downloadCallbackUrl'), timeout=5).raise_for_status()
except Exception as e:
maxkb_logger.error(f"callback appstore tool download error: {e}")
diff --git a/apps/chat/views/chat.py b/apps/chat/views/chat.py
index a18a5ad95dc..3a535a0bc3e 100644
--- a/apps/chat/views/chat.py
+++ b/apps/chat/views/chat.py
@@ -54,6 +54,7 @@ def get(self, request: Request):
allow_redirects=True,
timeout=10
)
+ response.raise_for_status()
content_type = response.headers.get('Content-Type', '').split(';')[0]
# 创建Django流式响应
django_response = StreamingHttpResponse(
diff --git a/apps/knowledge/serializers/knowledge_workflow.py b/apps/knowledge/serializers/knowledge_workflow.py
index dd004832f30..3d84d4aae0f 100644
--- a/apps/knowledge/serializers/knowledge_workflow.py
+++ b/apps/knowledge/serializers/knowledge_workflow.py
@@ -365,6 +365,7 @@ def save_workflow(self, instance: Dict):
raise AppApiException(500, _("Illegal download url"))
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
KnowledgeWorkflowSerializer.Import(
data={
"user_id": self.data.get("user_id"),
@@ -374,7 +375,7 @@ def save_workflow(self, instance: Dict):
).import_({"file": bytes_to_uploaded_file(res.content, "file.kbwf")}, is_import_tool=True)
try:
- requests.get(template_instance.get("downloadCallbackUrl"), timeout=5)
+ requests.get(template_instance.get("downloadCallbackUrl"), timeout=5).raise_for_status()
except Exception as e:
maxkb_logger.error(f"callback appstore tool download error: {e}")
@@ -609,6 +610,7 @@ def edit(self, instance: Dict):
raise AppApiException(500, _("Illegal download url"))
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
KnowledgeWorkflowSerializer.Import(
data={
"user_id": self.data.get("user_id"),
@@ -618,7 +620,7 @@ def edit(self, instance: Dict):
).import_({"file": bytes_to_uploaded_file(res.content, "file.kbwf")}, is_import_tool=False)
try:
- requests.get(template_instance.get("downloadCallbackUrl"), timeout=5)
+ requests.get(template_instance.get("downloadCallbackUrl"), timeout=5).raise_for_status()
except Exception as e:
maxkb_logger.error(f"callback appstore tool download error: {e}")
diff --git a/apps/models_provider/impl/aliyun_bai_lian_model_provider/model/tts.py b/apps/models_provider/impl/aliyun_bai_lian_model_provider/model/tts.py
index 2c009bd535e..7d352320635 100644
--- a/apps/models_provider/impl/aliyun_bai_lian_model_provider/model/tts.py
+++ b/apps/models_provider/impl/aliyun_bai_lian_model_provider/model/tts.py
@@ -79,6 +79,7 @@ def text_to_speech(self, text):
}
}
response = requests.post(api_url, headers=headers, json=payload)
+ response.raise_for_status()
audio_hex = response.json().get("output", {}).get("data", {}).get("audio")
if audio_hex:
audio = bytes.fromhex(audio_hex)
diff --git a/apps/models_provider/impl/ollama_model_provider/ollama_model_provider.py b/apps/models_provider/impl/ollama_model_provider/ollama_model_provider.py
index 5bb8a54049f..d3b731c2e70 100644
--- a/apps/models_provider/impl/ollama_model_provider/ollama_model_provider.py
+++ b/apps/models_provider/impl/ollama_model_provider/ollama_model_provider.py
@@ -263,17 +263,18 @@ def get_model_provide_info(self):
@staticmethod
def get_base_model_list(api_base):
base_url = get_base_url(api_base)
- r = requests.request(method="GET", url=f"{base_url}/api/tags", timeout=5)
- r.raise_for_status()
- return r.json()
+ res = requests.request(method="GET", url=f"{base_url}/api/tags", timeout=5)
+ res.raise_for_status()
+ return res.json()
def down_model(self, model_type: str, model_name, model_credential: Dict[str, object]) -> Iterator[DownModelChunk]:
api_base = model_credential.get('api_base', '')
base_url = get_base_url(api_base)
- r = requests.request(
+ res = requests.request(
method="POST",
url=f"{base_url}/api/pull",
data=json.dumps({"name": model_name}).encode(),
stream=True,
)
- return convert(r)
+ res.raise_for_status()
+ return convert(res)
diff --git a/apps/tools/serializers/tool.py b/apps/tools/serializers/tool.py
index 41eb79105ff..5cc53a0b0c0 100644
--- a/apps/tools/serializers/tool.py
+++ b/apps/tools/serializers/tool.py
@@ -424,6 +424,7 @@ def insert(self, instance, with_valid=True):
raise AppApiException(500, _("Illegal download url"))
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
tool = ToolSerializer.Import(data={
'file': bytes_to_uploaded_file(res.content, 'file.tool'),
'user_id': self.data.get('user_id'),
@@ -432,7 +433,7 @@ def insert(self, instance, with_valid=True):
}).import_(name=instance.get('name'), source='template')
try:
- requests.get(template_instance.get('downloadCallbackUrl'), timeout=5)
+ requests.get(template_instance.get('downloadCallbackUrl'), timeout=5).raise_for_status()
except Exception as e:
maxkb_logger.error(f"callback appstore tool download error: {e}")
return tool
@@ -1199,6 +1200,7 @@ def add(self, instance: Dict, with_valid=True):
(version.get('name') for version in versions if version.get('downloadUrl') == download_url),
)
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
tool_data = RestrictedUnpickler(io.BytesIO(res.content)).load().tool
tool_id = uuid.uuid7()
# 如果是SKILL类型的工具,保存文件内容到file表,并将code替换为file_id
@@ -1240,7 +1242,7 @@ def add(self, instance: Dict, with_valid=True):
'auth_target_type': AuthTargetType.TOOL.value
}).auth_resource(str(tool_id))
try:
- requests.get(instance.get('download_callback_url'), timeout=5)
+ requests.get(instance.get('download_callback_url'), timeout=5).raise_for_status()
except Exception as e:
maxkb_logger.error(f"callback appstore tool download error: {e}")
return ToolModelSerializer(tool).data
@@ -1266,6 +1268,7 @@ def update_tool(self, with_valid=True):
version.get('downloadUrl') == self.data.get('download_url')),
)
res = requests.get(self.data.get('download_url'), timeout=5)
+ res.raise_for_status()
tool_data = RestrictedUnpickler(io.BytesIO(res.content)).load().tool
# 如果是SKILL类型的工具,保存文件内容到file表,并将code替换为file_id
if tool_data.get('tool_type') == ToolType.SKILL:
@@ -1288,7 +1291,7 @@ def update_tool(self, with_valid=True):
# tool.is_active = False
tool.save()
try:
- requests.get(self.data.get('download_callback_url'), timeout=5)
+ requests.get(self.data.get('download_callback_url'), timeout=5).raise_for_status()
except Exception as e:
maxkb_logger.error(f"callback appstore tool download error: {e}")
return ToolModelSerializer(tool).data
diff --git a/apps/tools/serializers/tool_workflow.py b/apps/tools/serializers/tool_workflow.py
index 26ccaa9695b..4090db6fff6 100644
--- a/apps/tools/serializers/tool_workflow.py
+++ b/apps/tools/serializers/tool_workflow.py
@@ -327,6 +327,7 @@ def edit(self, instance: Dict):
raise AppApiException(500, _("Illegal download url"))
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
tool = QuerySet(Tool).filter(id=self.data.get("tool_id")).first()
ToolSerializer.Import(data={
'user_id': self.data.get('user_id'),
@@ -336,7 +337,7 @@ def edit(self, instance: Dict):
}).update_template_workflow(str(self.data.get('tool_id')))
try:
- requests.get(template_instance.get('downloadCallbackUrl'), timeout=5)
+ requests.get(template_instance.get('downloadCallbackUrl'), timeout=5).raise_for_status()
except Exception as e:
maxkb_logger.error(f"callback appstore tool download error: {e}")