瀏覽代碼

chore(lint): cleanup repeated cause exception in logging.exception replaced by helpful message (#10425)

tags/0.11.2
Bowen Liang 11 月之前
父節點
當前提交
51db59622c
No account linked to committer's email address
共有 47 個文件被更改,包括 83 次插入72 次删除
  1. 2
    2
      api/commands.py
  2. 3
    3
      api/controllers/console/app/audio.py
  3. 1
    1
      api/controllers/console/datasets/datasets_document.py
  4. 8
    2
      api/controllers/console/workspace/models.py
  5. 2
    2
      api/controllers/web/audio.py
  6. 1
    1
      api/core/app/apps/advanced_chat/app_generator.py
  7. 1
    1
      api/core/app/apps/advanced_chat/generate_task_pipeline.py
  8. 1
    1
      api/core/app/apps/message_based_app_generator.py
  9. 3
    1
      api/core/app/apps/workflow/app_generator.py
  10. 1
    1
      api/core/app/apps/workflow/generate_task_pipeline.py
  11. 1
    1
      api/core/app/task_pipeline/message_cycle_manage.py
  12. 1
    1
      api/core/helper/moderation.py
  13. 1
    1
      api/core/helper/module_import_helper.py
  14. 1
    1
      api/core/indexing_runner.py
  15. 6
    4
      api/core/llm_generator/llm_generator.py
  16. 1
    1
      api/core/model_runtime/model_providers/azure_ai_studio/rerank/rerank.py
  17. 1
    1
      api/core/model_runtime/model_providers/sagemaker/rerank/rerank.py
  18. 1
    1
      api/core/model_runtime/model_providers/sagemaker/speech2text/speech2text.py
  19. 1
    1
      api/core/model_runtime/model_providers/sagemaker/text_embedding/text_embedding.py
  20. 1
    1
      api/core/moderation/output_moderation.py
  21. 2
    2
      api/core/ops/ops_trace_manager.py
  22. 1
    1
      api/core/rag/datasource/vdb/couchbase/couchbase_vector.py
  23. 4
    4
      api/core/rag/datasource/vdb/lindorm/lindorm_vector.py
  24. 1
    1
      api/core/rag/datasource/vdb/myscale/myscale_vector.py
  25. 1
    1
      api/core/rag/datasource/vdb/opensearch/opensearch_vector.py
  26. 4
    4
      api/core/rag/embedding/cached_embedding.py
  27. 1
    1
      api/core/rag/extractor/word_extractor.py
  28. 1
    1
      api/core/rag/index_processor/processor/qa_index_processor.py
  29. 2
    2
      api/core/tools/provider/builtin/email/tools/send.py
  30. 1
    1
      api/core/tools/tool/workflow_tool.py
  31. 1
    1
      api/core/tools/tool_file_manager.py
  32. 1
    1
      api/core/tools/tool_manager.py
  33. 1
    1
      api/core/tools/utils/message_transformer.py
  34. 2
    2
      api/core/workflow/graph_engine/graph_engine.py
  35. 1
    1
      api/core/workflow/nodes/base/node.py
  36. 7
    7
      api/extensions/ext_storage.py
  37. 3
    3
      api/libs/smtp.py
  38. 1
    1
      api/models/dataset.py
  39. 1
    0
      api/pyproject.toml
  40. 2
    2
      api/services/account_service.py
  41. 1
    1
      api/services/app_service.py
  42. 1
    1
      api/services/tools/api_tools_manage_service.py
  43. 1
    1
      api/services/tools/tools_transform_service.py
  44. 1
    1
      api/tasks/annotation/delete_annotation_index_task.py
  45. 1
    1
      api/tasks/annotation/disable_annotation_reply_task.py
  46. 1
    1
      api/tasks/annotation/enable_annotation_reply_task.py
  47. 1
    1
      api/tasks/batch_create_segment_to_index_task.py

+ 2
- 2
api/commands.py 查看文件

click.echo(click.style("Database migration successful!", fg="green")) click.echo(click.style("Database migration successful!", fg="green"))


except Exception as e: except Exception as e:
logging.exception(f"Database migration failed: {e}")
logging.exception("Failed to execute database migration")
finally: finally:
lock.release() lock.release()
else: else:
except Exception as e: except Exception as e:
failed_app_ids.append(app_id) failed_app_ids.append(app_id)
click.echo(click.style("Failed to fix missing site for app {}".format(app_id), fg="red")) click.echo(click.style("Failed to fix missing site for app {}".format(app_id), fg="red"))
logging.exception(f"Fix app related site missing issue failed, error: {e}")
logging.exception(f"Failed to fix app related site missing issue, app_id: {app_id}")
continue continue


if not processed_count: if not processed_count:

+ 3
- 3
api/controllers/console/app/audio.py 查看文件

except ValueError as e: except ValueError as e:
raise e raise e
except Exception as e: except Exception as e:
logging.exception(f"internal server error, {str(e)}.")
logging.exception("Failed to handle post request to ChatMessageAudioApi")
raise InternalServerError() raise InternalServerError()




except ValueError as e: except ValueError as e:
raise e raise e
except Exception as e: except Exception as e:
logging.exception(f"internal server error, {str(e)}.")
logging.exception("Failed to handle post request to ChatMessageTextApi")
raise InternalServerError() raise InternalServerError()




except ValueError as e: except ValueError as e:
raise e raise e
except Exception as e: except Exception as e:
logging.exception(f"internal server error, {str(e)}.")
logging.exception("Failed to handle get request to TextModesApi")
raise InternalServerError() raise InternalServerError()





+ 1
- 1
api/controllers/console/datasets/datasets_document.py 查看文件

raise DocumentAlreadyFinishedError() raise DocumentAlreadyFinishedError()
retry_documents.append(document) retry_documents.append(document)
except Exception as e: except Exception as e:
logging.exception(f"Document {document_id} retry failed: {str(e)}")
logging.exception(f"Failed to retry document, document id: {document_id}")
continue continue
# retry document # retry document
DocumentService.retry_document(dataset_id, retry_documents) DocumentService.retry_document(dataset_id, retry_documents)

+ 8
- 2
api/controllers/console/workspace/models.py 查看文件

model=model_setting["model"], model=model_setting["model"],
) )
except Exception as ex: except Exception as ex:
logging.exception(f"{model_setting['model_type']} save error: {ex}")
logging.exception(
f"Failed to update default model, model type: {model_setting['model_type']},"
f" model:{model_setting.get('model')}"
)
raise ex raise ex


return {"result": "success"} return {"result": "success"}
credentials=args["credentials"], credentials=args["credentials"],
) )
except CredentialsValidateFailedError as ex: except CredentialsValidateFailedError as ex:
logging.exception(f"save model credentials error: {ex}")
logging.exception(
f"Failed to save model credentials, tenant_id: {tenant_id},"
f" model: {args.get('model')}, model_type: {args.get('model_type')}"
)
raise ValueError(str(ex)) raise ValueError(str(ex))


return {"result": "success"}, 200 return {"result": "success"}, 200

+ 2
- 2
api/controllers/web/audio.py 查看文件

except ValueError as e: except ValueError as e:
raise e raise e
except Exception as e: except Exception as e:
logging.exception(f"internal server error: {str(e)}")
logging.exception("Failed to handle post request to AudioApi")
raise InternalServerError() raise InternalServerError()




except ValueError as e: except ValueError as e:
raise e raise e
except Exception as e: except Exception as e:
logging.exception(f"internal server error: {str(e)}")
logging.exception("Failed to handle post request to TextApi")
raise InternalServerError() raise InternalServerError()





+ 1
- 1
api/core/app/apps/advanced_chat/app_generator.py 查看文件

if e.args[0] == "I/O operation on closed file.": # ignore this error if e.args[0] == "I/O operation on closed file.": # ignore this error
raise GenerateTaskStoppedError() raise GenerateTaskStoppedError()
else: else:
logger.exception(e)
logger.exception(f"Failed to process generate task pipeline, conversation_id: {conversation.id}")
raise e raise e

+ 1
- 1
api/core/app/apps/advanced_chat/generate_task_pipeline.py 查看文件

start_listener_time = time.time() start_listener_time = time.time()
yield MessageAudioStreamResponse(audio=audio_trunk.audio, task_id=task_id) yield MessageAudioStreamResponse(audio=audio_trunk.audio, task_id=task_id)
except Exception as e: except Exception as e:
logger.exception(e)
logger.exception(f"Failed to listen audio message, task_id: {task_id}")
break break
if tts_publisher: if tts_publisher:
yield MessageAudioEndStreamResponse(audio="", task_id=task_id) yield MessageAudioEndStreamResponse(audio="", task_id=task_id)

+ 1
- 1
api/core/app/apps/message_based_app_generator.py 查看文件

if e.args[0] == "I/O operation on closed file.": # ignore this error if e.args[0] == "I/O operation on closed file.": # ignore this error
raise GenerateTaskStoppedError() raise GenerateTaskStoppedError()
else: else:
logger.exception(e)
logger.exception(f"Failed to handle response, conversation_id: {conversation.id}")
raise e raise e


def _get_conversation_by_user( def _get_conversation_by_user(

+ 3
- 1
api/core/app/apps/workflow/app_generator.py 查看文件

if e.args[0] == "I/O operation on closed file.": # ignore this error if e.args[0] == "I/O operation on closed file.": # ignore this error
raise GenerateTaskStoppedError() raise GenerateTaskStoppedError()
else: else:
logger.exception(e)
logger.exception(
f"Fails to process generate task pipeline, task_id: {application_generate_entity.task_id}"
)
raise e raise e

+ 1
- 1
api/core/app/apps/workflow/generate_task_pipeline.py 查看文件

else: else:
yield MessageAudioStreamResponse(audio=audio_trunk.audio, task_id=task_id) yield MessageAudioStreamResponse(audio=audio_trunk.audio, task_id=task_id)
except Exception as e: except Exception as e:
logger.exception(e)
logger.exception(f"Fails to get audio trunk, task_id: {task_id}")
break break
if tts_publisher: if tts_publisher:
yield MessageAudioEndStreamResponse(audio="", task_id=task_id) yield MessageAudioEndStreamResponse(audio="", task_id=task_id)

+ 1
- 1
api/core/app/task_pipeline/message_cycle_manage.py 查看文件

conversation.name = name conversation.name = name
except Exception as e: except Exception as e:
if dify_config.DEBUG: if dify_config.DEBUG:
logging.exception(f"generate conversation name failed: {e}")
logging.exception(f"generate conversation name failed, conversation_id: {conversation_id}")
pass pass


db.session.merge(conversation) db.session.merge(conversation)

+ 1
- 1
api/core/helper/moderation.py 查看文件

if moderation_result is True: if moderation_result is True:
return True return True
except Exception as ex: except Exception as ex:
logger.exception(ex)
logger.exception(f"Fails to check moderation, provider_name: {provider_name}")
raise InvokeBadRequestError("Rate limit exceeded, please try again later.") raise InvokeBadRequestError("Rate limit exceeded, please try again later.")


return False return False

+ 1
- 1
api/core/helper/module_import_helper.py 查看文件

spec.loader.exec_module(module) spec.loader.exec_module(module)
return module return module
except Exception as e: except Exception as e:
logging.exception(f"Failed to load module {module_name} from {py_file_path}: {str(e)}")
logging.exception(f"Failed to load module {module_name} from script file '{py_file_path}'")
raise e raise e





+ 1
- 1
api/core/indexing_runner.py 查看文件

qa_documents.append(qa_document) qa_documents.append(qa_document)
format_documents.extend(qa_documents) format_documents.extend(qa_documents)
except Exception as e: except Exception as e:
logging.exception(e)
logging.exception("Failed to format qa document")


all_qa_documents.extend(format_documents) all_qa_documents.extend(format_documents)



+ 6
- 4
api/core/llm_generator/llm_generator.py 查看文件

except InvokeError: except InvokeError:
questions = [] questions = []
except Exception as e: except Exception as e:
logging.exception(e)
logging.exception("Failed to generate suggested questions after answer")
questions = [] questions = []


return questions return questions
error = str(e) error = str(e)
error_step = "generate rule config" error_step = "generate rule config"
except Exception as e: except Exception as e:
logging.exception(e)
logging.exception(f"Failed to generate rule config, model: {model_config.get('name')}")
rule_config["error"] = str(e) rule_config["error"] = str(e)


rule_config["error"] = f"Failed to {error_step}. Error: {error}" if error else "" rule_config["error"] = f"Failed to {error_step}. Error: {error}" if error else ""
error_step = "generate conversation opener" error_step = "generate conversation opener"


except Exception as e: except Exception as e:
logging.exception(e)
logging.exception(f"Failed to generate rule config, model: {model_config.get('name')}")
rule_config["error"] = str(e) rule_config["error"] = str(e)


rule_config["error"] = f"Failed to {error_step}. Error: {error}" if error else "" rule_config["error"] = f"Failed to {error_step}. Error: {error}" if error else ""
error = str(e) error = str(e)
return {"code": "", "language": code_language, "error": f"Failed to generate code. Error: {error}"} return {"code": "", "language": code_language, "error": f"Failed to generate code. Error: {error}"}
except Exception as e: except Exception as e:
logging.exception(e)
logging.exception(
f"Failed to invoke LLM model, model: {model_config.get('name')}, language: {code_language}"
)
return {"code": "", "language": code_language, "error": f"An unexpected error occurred: {str(e)}"} return {"code": "", "language": code_language, "error": f"An unexpected error occurred: {str(e)}"}


@classmethod @classmethod

+ 1
- 1
api/core/model_runtime/model_providers/azure_ai_studio/rerank/rerank.py 查看文件

return RerankResult(model=model, docs=rerank_documents) return RerankResult(model=model, docs=rerank_documents)


except Exception as e: except Exception as e:
logger.exception(f"Exception in Azure rerank: {e}")
logger.exception(f"Failed to invoke rerank model, model: {model}")
raise raise


def validate_credentials(self, model: str, credentials: dict) -> None: def validate_credentials(self, model: str, credentials: dict) -> None:

+ 1
- 1
api/core/model_runtime/model_providers/sagemaker/rerank/rerank.py 查看文件

return RerankResult(model=model, docs=rerank_documents) return RerankResult(model=model, docs=rerank_documents)


except Exception as e: except Exception as e:
logger.exception(f"Exception {e}, line : {line}")
logger.exception(f"Failed to invoke rerank model, model: {model}")


def validate_credentials(self, model: str, credentials: dict) -> None: def validate_credentials(self, model: str, credentials: dict) -> None:
""" """

+ 1
- 1
api/core/model_runtime/model_providers/sagemaker/speech2text/speech2text.py 查看文件

json_obj = json.loads(json_str) json_obj = json.loads(json_str)
asr_text = json_obj["text"] asr_text = json_obj["text"]
except Exception as e: except Exception as e:
logger.exception(f"failed to invoke speech2text model, {e}")
logger.exception(f"failed to invoke speech2text model, model: {model}")
raise CredentialsValidateFailedError(str(e)) raise CredentialsValidateFailedError(str(e))


return asr_text return asr_text

+ 1
- 1
api/core/model_runtime/model_providers/sagemaker/text_embedding/text_embedding.py 查看文件

return TextEmbeddingResult(embeddings=all_embeddings, usage=usage, model=model) return TextEmbeddingResult(embeddings=all_embeddings, usage=usage, model=model)


except Exception as e: except Exception as e:
logger.exception(f"Exception {e}, line : {line}")
logger.exception(f"Failed to invoke text embedding model, model: {model}, line: {line}")


def get_num_tokens(self, model: str, credentials: dict, texts: list[str]) -> int: def get_num_tokens(self, model: str, credentials: dict, texts: list[str]) -> int:
""" """

+ 1
- 1
api/core/moderation/output_moderation.py 查看文件

result: ModerationOutputsResult = moderation_factory.moderation_for_outputs(moderation_buffer) result: ModerationOutputsResult = moderation_factory.moderation_for_outputs(moderation_buffer)
return result return result
except Exception as e: except Exception as e:
logger.exception("Moderation Output error: %s", e)
logger.exception(f"Moderation Output error, app_id: {app_id}")


return None return None

+ 2
- 2
api/core/ops/ops_trace_manager.py 查看文件

trace_task.app_id = self.app_id trace_task.app_id = self.app_id
trace_manager_queue.put(trace_task) trace_manager_queue.put(trace_task)
except Exception as e: except Exception as e:
logging.exception(f"Error adding trace task: {e}")
logging.exception(f"Error adding trace task, trace_type {trace_task.trace_type}")
finally: finally:
self.start_timer() self.start_timer()


if tasks: if tasks:
self.send_to_celery(tasks) self.send_to_celery(tasks)
except Exception as e: except Exception as e:
logging.exception(f"Error processing trace tasks: {e}")
logging.exception("Error processing trace tasks")


def start_timer(self): def start_timer(self):
global trace_manager_timer global trace_manager_timer

+ 1
- 1
api/core/rag/datasource/vdb/couchbase/couchbase_vector.py 查看文件

try: try:
self._cluster.query(query, named_parameters={"doc_ids": ids}).execute() self._cluster.query(query, named_parameters={"doc_ids": ids}).execute()
except Exception as e: except Exception as e:
logger.exception(e)
logger.exception(f"Failed to delete documents, ids: {ids}")


def delete_by_document_id(self, document_id: str): def delete_by_document_id(self, document_id: str):
query = f""" query = f"""

+ 4
- 4
api/core/rag/datasource/vdb/lindorm/lindorm_vector.py 查看文件

existing_docs = self._client.mget(index=self._collection_name, body={"ids": batch_ids}, _source=False) existing_docs = self._client.mget(index=self._collection_name, body={"ids": batch_ids}, _source=False)
return {doc["_id"] for doc in existing_docs["docs"] if doc["found"]} return {doc["_id"] for doc in existing_docs["docs"] if doc["found"]}
except Exception as e: except Exception as e:
logger.exception(f"Error fetching batch {batch_ids}: {e}")
logger.exception(f"Error fetching batch {batch_ids}")
return set() return set()


@retry(stop=stop_after_attempt(3), wait=wait_fixed(60)) @retry(stop=stop_after_attempt(3), wait=wait_fixed(60))
) )
return {doc["_id"] for doc in existing_docs["docs"] if doc["found"]} return {doc["_id"] for doc in existing_docs["docs"] if doc["found"]}
except Exception as e: except Exception as e:
logger.exception(f"Error fetching batch {batch_ids}: {e}")
logger.exception(f"Error fetching batch ids: {batch_ids}")
return set() return set()


if ids is None: if ids is None:
else: else:
logger.warning(f"Index '{self._collection_name}' does not exist. No deletion performed.") logger.warning(f"Index '{self._collection_name}' does not exist. No deletion performed.")
except Exception as e: except Exception as e:
logger.exception(f"Error occurred while deleting the index: {e}")
logger.exception(f"Error occurred while deleting the index: {self._collection_name}")
raise e raise e


def text_exists(self, id: str) -> bool: def text_exists(self, id: str) -> bool:
try: try:
response = self._client.search(index=self._collection_name, body=query) response = self._client.search(index=self._collection_name, body=query)
except Exception as e: except Exception as e:
logger.exception(f"Error executing search: {e}")
logger.exception(f"Error executing vector search, query: {query}")
raise raise


docs_and_scores = [] docs_and_scores = []

+ 1
- 1
api/core/rag/datasource/vdb/myscale/myscale_vector.py 查看文件

for r in self._client.query(sql).named_results() for r in self._client.query(sql).named_results()
] ]
except Exception as e: except Exception as e:
logging.exception(f"\033[91m\033[1m{type(e)}\033[0m \033[95m{str(e)}\033[0m")
logging.exception(f"\033[91m\033[1m{type(e)}\033[0m \033[95m{str(e)}\033[0m") # noqa:TRY401
return [] return []


def delete(self) -> None: def delete(self) -> None:

+ 1
- 1
api/core/rag/datasource/vdb/opensearch/opensearch_vector.py 查看文件

try: try:
response = self._client.search(index=self._collection_name.lower(), body=query) response = self._client.search(index=self._collection_name.lower(), body=query)
except Exception as e: except Exception as e:
logger.exception(f"Error executing search: {e}")
logger.exception(f"Error executing vector search, query: {query}")
raise raise


docs = [] docs = []

+ 4
- 4
api/core/rag/embedding/cached_embedding.py 查看文件

except IntegrityError: except IntegrityError:
db.session.rollback() db.session.rollback()
except Exception as e: except Exception as e:
logging.exception("Failed transform embedding: %s", e)
logging.exception("Failed transform embedding")
cache_embeddings = [] cache_embeddings = []
try: try:
for i, embedding in zip(embedding_queue_indices, embedding_queue_embeddings): for i, embedding in zip(embedding_queue_indices, embedding_queue_embeddings):
db.session.rollback() db.session.rollback()
except Exception as ex: except Exception as ex:
db.session.rollback() db.session.rollback()
logger.exception("Failed to embed documents: %s", ex)
logger.exception("Failed to embed documents: %s")
raise ex raise ex


return text_embeddings return text_embeddings
embedding_results = (embedding_results / np.linalg.norm(embedding_results)).tolist() embedding_results = (embedding_results / np.linalg.norm(embedding_results)).tolist()
except Exception as ex: except Exception as ex:
if dify_config.DEBUG: if dify_config.DEBUG:
logging.exception(f"Failed to embed query text: {ex}")
logging.exception(f"Failed to embed query text '{text[:10]}...({len(text)} chars)'")
raise ex raise ex


try: try:
redis_client.setex(embedding_cache_key, 600, encoded_str) redis_client.setex(embedding_cache_key, 600, encoded_str)
except Exception as ex: except Exception as ex:
if dify_config.DEBUG: if dify_config.DEBUG:
logging.exception("Failed to add embedding to redis %s", ex)
logging.exception(f"Failed to add embedding to redis for the text '{text[:10]}...({len(text)} chars)'")
raise ex raise ex


return embedding_results return embedding_results

+ 1
- 1
api/core/rag/extractor/word_extractor.py 查看文件

for i in url_pattern.findall(x.text): for i in url_pattern.findall(x.text):
hyperlinks_url = str(i) hyperlinks_url = str(i)
except Exception as e: except Exception as e:
logger.exception(e)
logger.exception("Failed to parse HYPERLINK xml")


def parse_paragraph(paragraph): def parse_paragraph(paragraph):
paragraph_content = [] paragraph_content = []

+ 1
- 1
api/core/rag/index_processor/processor/qa_index_processor.py 查看文件

qa_documents.append(qa_document) qa_documents.append(qa_document)
format_documents.extend(qa_documents) format_documents.extend(qa_documents)
except Exception as e: except Exception as e:
logging.exception(e)
logging.exception("Failed to format qa document")


all_qa_documents.extend(format_documents) all_qa_documents.extend(format_documents)



+ 2
- 2
api/core/tools/provider/builtin/email/tools/send.py 查看文件

server.sendmail(parmas.email_account, parmas.sender_to, msg.as_string()) server.sendmail(parmas.email_account, parmas.sender_to, msg.as_string())
return True return True
except Exception as e: except Exception as e:
logging.exception("send email failed: %s", e)
logging.exception("send email failed")
return False return False
else: # NONE or TLS else: # NONE or TLS
try: try:
server.sendmail(parmas.email_account, parmas.sender_to, msg.as_string()) server.sendmail(parmas.email_account, parmas.sender_to, msg.as_string())
return True return True
except Exception as e: except Exception as e:
logging.exception("send email failed: %s", e)
logging.exception("send email failed")
return False return False

+ 1
- 1
api/core/tools/tool/workflow_tool.py 查看文件



files.append(file_dict) files.append(file_dict)
except Exception as e: except Exception as e:
logger.exception(e)
logger.exception(f"Failed to transform file {file}")
else: else:
parameters_result[parameter.name] = tool_parameters.get(parameter.name) parameters_result[parameter.name] = tool_parameters.get(parameter.name)



+ 1
- 1
api/core/tools/tool_file_manager.py 查看文件

response.raise_for_status() response.raise_for_status()
blob = response.content blob = response.content
except Exception as e: except Exception as e:
logger.exception(f"Failed to download file from {file_url}: {e}")
logger.exception(f"Failed to download file from {file_url}")
raise raise


mimetype = guess_type(file_url)[0] or "octet/stream" mimetype = guess_type(file_url)[0] or "octet/stream"

+ 1
- 1
api/core/tools/tool_manager.py 查看文件

yield provider yield provider


except Exception as e: except Exception as e:
logger.exception(f"load builtin provider {provider} error: {e}")
logger.exception(f"load builtin provider {provider}")
continue continue
# set builtin providers loaded # set builtin providers loaded
cls._builtin_providers_loaded = True cls._builtin_providers_loaded = True

+ 1
- 1
api/core/tools/utils/message_transformer.py 查看文件

) )
) )
except Exception as e: except Exception as e:
logger.exception(e)
logger.exception(f"Failed to download image from {url}")
result.append( result.append(
ToolInvokeMessage( ToolInvokeMessage(
type=ToolInvokeMessage.MessageType.TEXT, type=ToolInvokeMessage.MessageType.TEXT,

+ 2
- 2
api/core/workflow/graph_engine/graph_engine.py 查看文件

"answer" "answer"
].strip() ].strip()
except Exception as e: except Exception as e:
logger.exception(f"Graph run failed: {str(e)}")
logger.exception("Graph run failed")
yield GraphRunFailedEvent(error=str(e)) yield GraphRunFailedEvent(error=str(e))
return return


) )
return return
except Exception as e: except Exception as e:
logger.exception(f"Node {node_instance.node_data.title} run failed: {str(e)}")
logger.exception(f"Node {node_instance.node_data.title} run failed")
raise e raise e
finally: finally:
db.session.close() db.session.close()

+ 1
- 1
api/core/workflow/nodes/base/node.py 查看文件

try: try:
result = self._run() result = self._run()
except Exception as e: except Exception as e:
logger.exception(f"Node {self.node_id} failed to run: {e}")
logger.exception(f"Node {self.node_id} failed to run")
result = NodeRunResult( result = NodeRunResult(
status=WorkflowNodeExecutionStatus.FAILED, status=WorkflowNodeExecutionStatus.FAILED,
error=str(e), error=str(e),

+ 7
- 7
api/extensions/ext_storage.py 查看文件

try: try:
self.storage_runner.save(filename, data) self.storage_runner.save(filename, data)
except Exception as e: except Exception as e:
logging.exception("Failed to save file: %s", e)
logging.exception(f"Failed to save file {filename}")
raise e raise e


def load(self, filename: str, /, *, stream: bool = False) -> Union[bytes, Generator]: def load(self, filename: str, /, *, stream: bool = False) -> Union[bytes, Generator]:
else: else:
return self.load_once(filename) return self.load_once(filename)
except Exception as e: except Exception as e:
logging.exception("Failed to load file: %s", e)
logging.exception(f"Failed to load file {filename}")
raise e raise e


def load_once(self, filename: str) -> bytes: def load_once(self, filename: str) -> bytes:
try: try:
return self.storage_runner.load_once(filename) return self.storage_runner.load_once(filename)
except Exception as e: except Exception as e:
logging.exception("Failed to load_once file: %s", e)
logging.exception(f"Failed to load_once file {filename}")
raise e raise e


def load_stream(self, filename: str) -> Generator: def load_stream(self, filename: str) -> Generator:
try: try:
return self.storage_runner.load_stream(filename) return self.storage_runner.load_stream(filename)
except Exception as e: except Exception as e:
logging.exception("Failed to load_stream file: %s", e)
logging.exception(f"Failed to load_stream file {filename}")
raise e raise e


def download(self, filename, target_filepath): def download(self, filename, target_filepath):
try: try:
self.storage_runner.download(filename, target_filepath) self.storage_runner.download(filename, target_filepath)
except Exception as e: except Exception as e:
logging.exception("Failed to download file: %s", e)
logging.exception(f"Failed to download file {filename}")
raise e raise e


def exists(self, filename): def exists(self, filename):
try: try:
return self.storage_runner.exists(filename) return self.storage_runner.exists(filename)
except Exception as e: except Exception as e:
logging.exception("Failed to check file exists: %s", e)
logging.exception(f"Failed to check file exists {filename}")
raise e raise e


def delete(self, filename): def delete(self, filename):
try: try:
return self.storage_runner.delete(filename) return self.storage_runner.delete(filename)
except Exception as e: except Exception as e:
logging.exception("Failed to delete file: %s", e)
logging.exception(f"Failed to delete file {filename}")
raise e raise e





+ 3
- 3
api/libs/smtp.py 查看文件



smtp.sendmail(self._from, mail["to"], msg.as_string()) smtp.sendmail(self._from, mail["to"], msg.as_string())
except smtplib.SMTPException as e: except smtplib.SMTPException as e:
logging.exception(f"SMTP error occurred: {str(e)}")
logging.exception("SMTP error occurred")
raise raise
except TimeoutError as e: except TimeoutError as e:
logging.exception(f"Timeout occurred while sending email: {str(e)}")
logging.exception("Timeout occurred while sending email")
raise raise
except Exception as e: except Exception as e:
logging.exception(f"Unexpected error occurred while sending email: {str(e)}")
logging.exception(f"Unexpected error occurred while sending email to {mail['to']}")
raise raise
finally: finally:
if smtp: if smtp:

+ 1
- 1
api/models/dataset.py 查看文件

return json.loads(keyword_table_text.decode("utf-8"), cls=SetDecoder) return json.loads(keyword_table_text.decode("utf-8"), cls=SetDecoder)
return None return None
except Exception as e: except Exception as e:
logging.exception(str(e))
logging.exception(f"Failed to load keyword table from file: {file_key}")
return None return None





+ 1
- 0
api/pyproject.toml 查看文件

"S506", # unsafe-yaml-load "S506", # unsafe-yaml-load
"SIM", # flake8-simplify rules "SIM", # flake8-simplify rules
"TRY400", # error-instead-of-exception "TRY400", # error-instead-of-exception
"TRY401", # verbose-log-message
"UP", # pyupgrade rules "UP", # pyupgrade rules
"W191", # tab-indentation "W191", # tab-indentation
"W605", # invalid-escape-sequence "W605", # invalid-escape-sequence

+ 2
- 2
api/services/account_service.py 查看文件

db.session.query(Tenant).delete() db.session.query(Tenant).delete()
db.session.commit() db.session.commit()


logging.exception(f"Setup failed: {e}")
logging.exception(f"Setup account failed, email: {email}, name: {name}")
raise ValueError(f"Setup failed: {e}") raise ValueError(f"Setup failed: {e}")


@classmethod @classmethod
db.session.rollback() db.session.rollback()
except Exception as e: except Exception as e:
db.session.rollback() db.session.rollback()
logging.exception(f"Register failed: {e}")
logging.exception("Register failed")
raise AccountRegisterError(f"Registration failed: {e}") from e raise AccountRegisterError(f"Registration failed: {e}") from e


return account return account

+ 1
- 1
api/services/app_service.py 查看文件

except (ProviderTokenNotInitError, LLMBadRequestError): except (ProviderTokenNotInitError, LLMBadRequestError):
model_instance = None model_instance = None
except Exception as e: except Exception as e:
logging.exception(e)
logging.exception(f"Get default model instance failed, tenant_id: {tenant_id}")
model_instance = None model_instance = None


if model_instance: if model_instance:

+ 1
- 1
api/services/tools/api_tools_manage_service.py 查看文件

# try to parse schema, avoid SSRF attack # try to parse schema, avoid SSRF attack
ApiToolManageService.parser_api_schema(schema) ApiToolManageService.parser_api_schema(schema)
except Exception as e: except Exception as e:
logger.exception(f"parse api schema error: {str(e)}")
logger.exception("parse api schema error")
raise ValueError("invalid schema, please check the url you provided") raise ValueError("invalid schema, please check the url you provided")


return {"schema": schema} return {"schema": schema}

+ 1
- 1
api/services/tools/tools_transform_service.py 查看文件

try: try:
username = db_provider.user.name username = db_provider.user.name
except Exception as e: except Exception as e:
logger.exception(f"failed to get user name for api provider {db_provider.id}: {str(e)}")
logger.exception(f"failed to get user name for api provider {db_provider.id}")
# add provider into providers # add provider into providers
credentials = db_provider.credentials credentials = db_provider.credentials
result = UserToolProvider( result = UserToolProvider(

+ 1
- 1
api/tasks/annotation/delete_annotation_index_task.py 查看文件

click.style("App annotations index deleted : {} latency: {}".format(app_id, end_at - start_at), fg="green") click.style("App annotations index deleted : {} latency: {}".format(app_id, end_at - start_at), fg="green")
) )
except Exception as e: except Exception as e:
logging.exception("Annotation deleted index failed:{}".format(str(e)))
logging.exception("Annotation deleted index failed")

+ 1
- 1
api/tasks/annotation/disable_annotation_reply_task.py 查看文件

click.style("App annotations index deleted : {} latency: {}".format(app_id, end_at - start_at), fg="green") click.style("App annotations index deleted : {} latency: {}".format(app_id, end_at - start_at), fg="green")
) )
except Exception as e: except Exception as e:
logging.exception("Annotation batch deleted index failed:{}".format(str(e)))
logging.exception("Annotation batch deleted index failed")
redis_client.setex(disable_app_annotation_job_key, 600, "error") redis_client.setex(disable_app_annotation_job_key, 600, "error")
disable_app_annotation_error_key = "disable_app_annotation_error_{}".format(str(job_id)) disable_app_annotation_error_key = "disable_app_annotation_error_{}".format(str(job_id))
redis_client.setex(disable_app_annotation_error_key, 600, str(e)) redis_client.setex(disable_app_annotation_error_key, 600, str(e))

+ 1
- 1
api/tasks/annotation/enable_annotation_reply_task.py 查看文件

click.style("App annotations added to index: {} latency: {}".format(app_id, end_at - start_at), fg="green") click.style("App annotations added to index: {} latency: {}".format(app_id, end_at - start_at), fg="green")
) )
except Exception as e: except Exception as e:
logging.exception("Annotation batch created index failed:{}".format(str(e)))
logging.exception("Annotation batch created index failed")
redis_client.setex(enable_app_annotation_job_key, 600, "error") redis_client.setex(enable_app_annotation_job_key, 600, "error")
enable_app_annotation_error_key = "enable_app_annotation_error_{}".format(str(job_id)) enable_app_annotation_error_key = "enable_app_annotation_error_{}".format(str(job_id))
redis_client.setex(enable_app_annotation_error_key, 600, str(e)) redis_client.setex(enable_app_annotation_error_key, 600, str(e))

+ 1
- 1
api/tasks/batch_create_segment_to_index_task.py 查看文件

click.style("Segment batch created job: {} latency: {}".format(job_id, end_at - start_at), fg="green") click.style("Segment batch created job: {} latency: {}".format(job_id, end_at - start_at), fg="green")
) )
except Exception as e: except Exception as e:
logging.exception("Segments batch created index failed:{}".format(str(e)))
logging.exception("Segments batch created index failed")
redis_client.setex(indexing_cache_key, 600, "error") redis_client.setex(indexing_cache_key, 600, "error")

Loading…
取消
儲存