| 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: |
| 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() | ||||
| 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) |
| 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 |
| 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() | ||||
| 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 |
| 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) |
| 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( |
| 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 |
| 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) |
| 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) |
| 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 |
| 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 | ||||
| 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) | ||||
| 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 |
| 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: |
| 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: | ||||
| """ | """ |
| 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 |
| 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: | ||||
| """ | """ |
| 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 |
| 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 |
| 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""" |
| 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 = [] |
| 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: |
| 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 = [] |
| 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 |
| 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 = [] |
| 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) | ||||
| 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 |
| 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) | ||||
| 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" |
| 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 |
| ) | ) | ||||
| ) | ) | ||||
| 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, |
| "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() |
| 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), |
| 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 | ||||
| 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: |
| 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 | ||||
| "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 |
| 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 |
| 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: |
| # 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} |
| 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( |
| 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") |
| 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)) |
| 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)) |
| 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") |