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 b47df5f8a5d..6673fee252b 100644
--- a/apps/application/serializers/application.py
+++ b/apps/application/serializers/application.py
@@ -523,6 +523,7 @@ def insert_template_workflow(self, instance: Dict):
download_url = work_flow_template.get('downloadUrl')
# 查找匹配的版本名称
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_({
@@ -541,7 +542,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
@@ -1136,6 +1137,7 @@ def update_template_workflow(self, instance: Dict, app: Application):
download_url = work_flow_template.get('downloadUrl')
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
try:
mk_instance = restricted_loads(res.content)
except Exception as e:
@@ -1185,7 +1187,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 7f131b8f488..4bdf8fec720 100644
--- a/apps/knowledge/serializers/knowledge_workflow.py
+++ b/apps/knowledge/serializers/knowledge_workflow.py
@@ -297,6 +297,7 @@ def save_workflow(self, instance: Dict):
download_url = template_instance.get('downloadUrl')
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
KnowledgeWorkflowSerializer.Import(data={
'user_id': self.data.get('user_id'),
'workspace_id': self.data.get('workspace_id'),
@@ -304,7 +305,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}")
@@ -523,6 +524,7 @@ def edit(self, instance: Dict):
download_url = template_instance.get('downloadUrl')
# 查找匹配的版本名称
res = requests.get(download_url, timeout=5)
+ res.raise_for_status()
KnowledgeWorkflowSerializer.Import(data={
'user_id': self.data.get('user_id'),
'workspace_id': self.data.get('workspace_id'),
@@ -530,7 +532,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 5fc6a8153ef..23c5c95ae7d 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 54e0f31bbf7..4143b13ad7d 100644
--- a/apps/tools/serializers/tool.py
+++ b/apps/tools/serializers/tool.py
@@ -422,6 +422,7 @@ def insert(self, instance, with_valid=True):
download_url = template_instance.get('downloadUrl')
# 查找匹配的版本名称
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'),
@@ -430,7 +431,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
@@ -1195,6 +1196,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
@@ -1236,7 +1238,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
@@ -1262,6 +1264,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:
@@ -1284,7 +1287,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 b592c139c1f..a1616bb5170 100644
--- a/apps/tools/serializers/tool_workflow.py
+++ b/apps/tools/serializers/tool_workflow.py
@@ -317,6 +317,7 @@ def edit(self, instance: Dict):
download_url = template_instance.get('downloadUrl')
# 查找匹配的版本名称
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'),
@@ -326,7 +327,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}")