From bab3fce13612b901626d436dd5ccc83623e2efa2 Mon Sep 17 00:00:00 2001 From: Jin Hai Date: Wed, 5 Nov 2025 08:01:39 +0800 Subject: [PATCH] Move some constants to common (#11004) ### What problem does this PR solve? As title. ### Type of change - [x] Refactoring --------- Signed-off-by: Jin Hai --- admin/server/auth.py | 2 +- admin/server/services.py | 2 +- agent/component/categorize.py | 2 +- agent/component/llm.py | 2 +- agent/tools/retrieval.py | 2 +- api/apps/__init__.py | 2 +- api/apps/api_app.py | 4 +- api/apps/chunk_app.py | 3 +- api/apps/connector_app.py | 4 +- api/apps/conversation_app.py | 3 +- api/apps/dialog_app.py | 2 +- api/apps/document_app.py | 4 +- api/apps/file_app.py | 4 +- api/apps/kb_app.py | 11 ++- api/apps/llm_app.py | 2 +- api/apps/mcp_server_app.py | 3 +- api/apps/sdk/chat.py | 3 +- api/apps/sdk/dataset.py | 3 +- api/apps/sdk/dify_retrieval.py | 3 +- api/apps/sdk/doc.py | 4 +- api/apps/sdk/session.py | 3 +- api/apps/search_app.py | 3 +- api/apps/tenant_app.py | 4 +- api/db/__init__.py | 73 +------------------ api/db/db_models.py | 3 +- api/db/init_data.py | 3 +- api/db/joint_services/user_account_service.py | 4 +- api/db/services/connector_service.py | 3 +- api/db/services/conversation_service.py | 2 +- api/db/services/dialog_service.py | 2 +- api/db/services/document_service.py | 3 +- api/db/services/file2document_service.py | 2 +- api/db/services/file_service.py | 3 +- api/db/services/knowledgebase_service.py | 5 +- api/db/services/search_service.py | 2 +- api/db/services/task_service.py | 3 +- api/db/services/tenant_llm_service.py | 2 +- api/db/services/user_service.py | 2 +- api/utils/api_utils.py | 2 +- common/constants.py | 6 ++ deepdoc/parser/figure_parser.py | 2 +- graphrag/general/smoke.py | 2 +- graphrag/light/smoke.py | 2 +- graphrag/search.py | 2 +- rag/app/audio.py | 2 +- rag/app/laws.py | 2 +- rag/app/manual.py | 2 +- rag/app/naive.py | 2 +- rag/app/paper.py | 2 +- rag/app/picture.py | 2 +- rag/app/presentation.py | 2 +- rag/benchmark.py | 2 +- rag/flow/parser/parser.py | 2 +- rag/flow/tokenizer/tokenizer.py | 2 +- rag/prompts/generator.py | 4 +- rag/svr/sync_data_source.py | 2 +- rag/svr/task_executor.py | 2 +- rag/utils/constants.py | 23 ------ rag/utils/mcp_tool_call_conn.py | 2 +- 59 files changed, 83 insertions(+), 173 deletions(-) delete mode 100644 rag/utils/constants.py diff --git a/admin/server/auth.py b/admin/server/auth.py index 859ce21bf..f3a3c3d55 100644 --- a/admin/server/auth.py +++ b/admin/server/auth.py @@ -27,7 +27,7 @@ from api import settings from api.common.exceptions import AdminException, UserNotFoundError from api.db.init_data import encode_to_base64 from api.db.services import UserService -from api.db import ActiveEnum, StatusEnum +from common.constants import ActiveEnum, StatusEnum from api.utils.crypt import decrypt from common.misc_utils import get_uuid from common.time_utils import current_timestamp, datetime_format, get_format_time diff --git a/admin/server/services.py b/admin/server/services.py index f5c6ce363..06682acec 100644 --- a/admin/server/services.py +++ b/admin/server/services.py @@ -17,7 +17,7 @@ import re from werkzeug.security import check_password_hash -from api.db import ActiveEnum +from common.constants import ActiveEnum from api.db.services import UserService from api.db.joint_services.user_account_service import create_new_user, delete_user_data from api.db.services.canvas_service import UserCanvasService diff --git a/agent/component/categorize.py b/agent/component/categorize.py index 1c611daf7..3534225d9 100644 --- a/agent/component/categorize.py +++ b/agent/component/categorize.py @@ -18,7 +18,7 @@ import os import re from abc import ABC -from api.db import LLMType +from common.constants import LLMType from api.db.services.llm_service import LLMBundle from agent.component.llm import LLMParam, LLM from common.connection_utils import timeout diff --git a/agent/component/llm.py b/agent/component/llm.py index 123124765..f8d9c3cc4 100644 --- a/agent/component/llm.py +++ b/agent/component/llm.py @@ -21,7 +21,7 @@ from copy import deepcopy from typing import Any, Generator import json_repair from functools import partial -from api.db import LLMType +from common.constants import LLMType from api.db.services.llm_service import LLMBundle from api.db.services.tenant_llm_service import TenantLLMService from agent.component.base import ComponentBase, ComponentParamBase diff --git a/agent/tools/retrieval.py b/agent/tools/retrieval.py index 99ed04e2f..22909a28a 100644 --- a/agent/tools/retrieval.py +++ b/agent/tools/retrieval.py @@ -19,7 +19,7 @@ import os import re from abc import ABC from agent.tools.base import ToolParamBase, ToolBase, ToolMeta -from api.db import LLMType +from common.constants import LLMType from api.db.services.document_service import DocumentService from api.db.services.dialog_service import meta_filter from api.db.services.knowledgebase_service import KnowledgebaseService diff --git a/api/apps/__init__.py b/api/apps/__init__.py index ba06efd76..849b86954 100644 --- a/api/apps/__init__.py +++ b/api/apps/__init__.py @@ -24,7 +24,7 @@ from flask_cors import CORS from flasgger import Swagger from itsdangerous.url_safe import URLSafeTimedSerializer as Serializer -from api.db import StatusEnum +from common.constants import StatusEnum from api.db.db_models import close_connection from api.db.services import UserService from api.utils.json_encode import CustomJSONEncoder diff --git a/api/apps/api_app.py b/api/apps/api_app.py index 1f72e4728..306b54268 100644 --- a/api/apps/api_app.py +++ b/api/apps/api_app.py @@ -21,7 +21,7 @@ from flask import request, Response from api.db.services.llm_service import LLMBundle from flask_login import login_required, current_user -from api.db import VALID_FILE_TYPES, VALID_TASK_STATUS, FileType, LLMType, ParserType, FileSource +from api.db import VALID_FILE_TYPES, FileType from api.db.db_models import APIToken, Task, File from api.db.services import duplicate_name from api.db.services.api_service import APITokenService, API4ConversationService @@ -34,7 +34,7 @@ from api.db.services.task_service import queue_tasks, TaskService from api.db.services.user_service import UserTenantService from api import settings from common.misc_utils import get_uuid -from common.constants import RetCode +from common.constants import RetCode, VALID_TASK_STATUS, LLMType, ParserType, FileSource from api.utils.api_utils import server_error_response, get_data_error_result, get_json_result, validate_request, \ generate_confirmation_token diff --git a/api/apps/chunk_app.py b/api/apps/chunk_app.py index bcb23c344..89e59400b 100644 --- a/api/apps/chunk_app.py +++ b/api/apps/chunk_app.py @@ -22,7 +22,6 @@ from flask import request from flask_login import current_user, login_required from api import settings -from api.db import LLMType, ParserType from api.db.services.dialog_service import meta_filter from api.db.services.document_service import DocumentService from api.db.services.knowledgebase_service import KnowledgebaseService @@ -36,7 +35,7 @@ from rag.nlp import rag_tokenizer, search from rag.prompts.generator import gen_meta_filter, cross_languages, keyword_extraction from rag.settings import PAGERANK_FLD from common.string_utils import remove_redundant_spaces -from common.constants import RetCode +from common.constants import RetCode, LLMType, ParserType @manager.route('/list', methods=['POST']) # noqa: F821 diff --git a/api/apps/connector_app.py b/api/apps/connector_app.py index a2ae4465f..f463c7f39 100644 --- a/api/apps/connector_app.py +++ b/api/apps/connector_app.py @@ -18,11 +18,11 @@ import time from flask import request from flask_login import login_required, current_user -from api.db import TaskStatus, InputType +from api.db import InputType from api.db.services.connector_service import ConnectorService, Connector2KbService, SyncLogsService from api.utils.api_utils import get_json_result, validate_request, get_data_error_result from common.misc_utils import get_uuid -from common.constants import RetCode +from common.constants import RetCode, TaskStatus @manager.route("/set", methods=["POST"]) # noqa: F821 @login_required diff --git a/api/apps/conversation_app.py b/api/apps/conversation_app.py index 59771d72d..984e57cac 100644 --- a/api/apps/conversation_app.py +++ b/api/apps/conversation_app.py @@ -19,7 +19,6 @@ import logging from copy import deepcopy from flask import Response, request from flask_login import current_user, login_required -from api.db import LLMType from api.db.db_models import APIToken from api.db.services.conversation_service import ConversationService, structure_answer from api.db.services.dialog_service import DialogService, ask, chat, gen_mindmap @@ -30,7 +29,7 @@ from api.db.services.user_service import TenantService, UserTenantService from api.utils.api_utils import get_data_error_result, get_json_result, server_error_response, validate_request from rag.prompts.template import load_prompt from rag.prompts.generator import chunks_format -from common.constants import RetCode +from common.constants import RetCode, LLMType @manager.route("/set", methods=["POST"]) # noqa: F821 diff --git a/api/apps/dialog_app.py b/api/apps/dialog_app.py index c1daa4b07..99f700568 100644 --- a/api/apps/dialog_app.py +++ b/api/apps/dialog_app.py @@ -18,7 +18,7 @@ from flask import request from flask_login import login_required, current_user from api.db.services import duplicate_name from api.db.services.dialog_service import DialogService -from api.db import StatusEnum +from common.constants import StatusEnum from api.db.services.tenant_llm_service import TenantLLMService from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.user_service import TenantService, UserTenantService diff --git a/api/apps/document_app.py b/api/apps/document_app.py index 8d0711d2f..3d6a02710 100644 --- a/api/apps/document_app.py +++ b/api/apps/document_app.py @@ -26,7 +26,7 @@ from flask_login import current_user, login_required from api import settings from api.common.check_team_permission import check_kb_team_permission from api.constants import FILE_NAME_LEN_LIMIT, IMG_BASE64_PREFIX -from api.db import VALID_FILE_TYPES, VALID_TASK_STATUS, FileType, ParserType, TaskStatus +from api.db import VALID_FILE_TYPES, FileType from api.db.db_models import Task from api.db.services import duplicate_name from api.db.services.document_service import DocumentService, doc_upload_and_parse @@ -44,7 +44,7 @@ from api.utils.api_utils import ( ) from api.utils.file_utils import filename_type, thumbnail from common.file_utils import get_project_base_directory -from common.constants import RetCode +from common.constants import RetCode, VALID_TASK_STATUS, ParserType, TaskStatus from api.utils.web_utils import CONTENT_TYPE_MAP, html2pdf, is_valid_url from deepdoc.parser.html_parser import RAGFlowHtmlParser from rag.nlp import search, rag_tokenizer diff --git a/api/apps/file_app.py b/api/apps/file_app.py index 98b380f96..b9b8324f4 100644 --- a/api/apps/file_app.py +++ b/api/apps/file_app.py @@ -27,8 +27,8 @@ from api.db.services.document_service import DocumentService from api.db.services.file2document_service import File2DocumentService from api.utils.api_utils import server_error_response, get_data_error_result, validate_request from common.misc_utils import get_uuid -from common.constants import RetCode -from api.db import FileType, FileSource +from common.constants import RetCode, FileSource +from api.db import FileType from api.db.services import duplicate_name from api.db.services.file_service import FileService from api.utils.api_utils import get_json_result diff --git a/api/apps/kb_app.py b/api/apps/kb_app.py index ff3a102f7..19f5fc8fa 100644 --- a/api/apps/kb_app.py +++ b/api/apps/kb_app.py @@ -21,7 +21,7 @@ from flask import request from flask_login import login_required, current_user import numpy as np -from api.db import LLMType + from api.db.services.connector_service import Connector2KbService from api.db.services.llm_service import LLMBundle from api.db.services.document_service import DocumentService, queue_raptor_o_graphrag_tasks @@ -31,7 +31,7 @@ from api.db.services.pipeline_operation_log_service import PipelineOperationLogS from api.db.services.task_service import TaskService, GRAPH_RAPTOR_FAKE_DOC_ID from api.db.services.user_service import TenantService, UserTenantService from api.utils.api_utils import get_error_data_result, server_error_response, get_data_error_result, validate_request, not_allowed_parameters -from api.db import PipelineTaskType, StatusEnum, FileSource, VALID_FILE_TYPES, VALID_TASK_STATUS +from api.db import VALID_FILE_TYPES from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.db_models import File from api.utils.api_utils import get_json_result @@ -42,7 +42,7 @@ from rag.settings import PAGERANK_FLD from rag.utils.redis_conn import REDIS_CONN from rag.utils.storage_factory import STORAGE_IMPL from rag.utils.doc_store_conn import OrderByExpr -from common.constants import RetCode +from common.constants import RetCode, PipelineTaskType, StatusEnum, VALID_TASK_STATUS, FileSource, LLMType @manager.route('/create', methods=['post']) # noqa: F821 @@ -748,7 +748,6 @@ def delete_kb_task(): return get_error_data_result(message="Internal Error: Invalid task type") - ok = KnowledgebaseService.update_by_id(kb_id, {kb_task_id_field: "", kb_task_finish_at: None}) if not ok: return server_error_response(f"Internal error: cannot delete task {pipeline_task_type}") @@ -891,7 +890,7 @@ def check_embedding(): } if summary["avg_cos_sim"] > 0.99: return get_json_result(data={"summary": summary, "results": results}) - return get_json_result(code=settings.RetCode.NOT_EFFECTIVE, message="failed", data={"summary": summary, "results": results}) + return get_json_result(code=RetCode.NOT_EFFECTIVE, message="failed", data={"summary": summary, "results": results}) @manager.route("//link", methods=["POST"]) # noqa: F821 @@ -901,6 +900,6 @@ def link_connector(kb_id): req = request.json errors = Connector2KbService.link_connectors(kb_id, req["connector_ids"], current_user.id) if errors: - return get_json_result(data=False, message=errors, code=settings.RetCode.SERVER_ERROR) + return get_json_result(data=False, message=errors, code=RetCode.SERVER_ERROR) return get_json_result(data=True) diff --git a/api/apps/llm_app.py b/api/apps/llm_app.py index 989bb006b..4f0e3c91c 100644 --- a/api/apps/llm_app.py +++ b/api/apps/llm_app.py @@ -21,7 +21,7 @@ from flask_login import login_required, current_user from api.db.services.tenant_llm_service import LLMFactoriesService, TenantLLMService from api.db.services.llm_service import LLMService from api.utils.api_utils import server_error_response, get_data_error_result, validate_request -from api.db import StatusEnum, LLMType +from common.constants import StatusEnum, LLMType from api.db.db_models import TenantLLM from api.utils.api_utils import get_json_result from common.base64_image import test_image diff --git a/api/apps/mcp_server_app.py b/api/apps/mcp_server_app.py index 65eb86fed..66d447491 100644 --- a/api/apps/mcp_server_app.py +++ b/api/apps/mcp_server_app.py @@ -16,11 +16,10 @@ from flask import Response, request from flask_login import current_user, login_required -from api.db import VALID_MCP_SERVER_TYPES from api.db.db_models import MCPServer from api.db.services.mcp_server_service import MCPServerService from api.db.services.user_service import TenantService -from common.constants import RetCode +from common.constants import RetCode, VALID_MCP_SERVER_TYPES from common.misc_utils import get_uuid from api.utils.api_utils import get_data_error_result, get_json_result, server_error_response, validate_request, \ diff --git a/api/apps/sdk/chat.py b/api/apps/sdk/chat.py index bd5ec431a..a3f03b448 100644 --- a/api/apps/sdk/chat.py +++ b/api/apps/sdk/chat.py @@ -17,13 +17,12 @@ import logging from flask import request -from api.db import StatusEnum from api.db.services.dialog_service import DialogService from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.tenant_llm_service import TenantLLMService from api.db.services.user_service import TenantService from common.misc_utils import get_uuid -from common.constants import RetCode +from common.constants import RetCode, StatusEnum from api.utils.api_utils import check_duplicate_ids, get_error_data_result, get_result, token_required diff --git a/api/apps/sdk/dataset.py b/api/apps/sdk/dataset.py index 45701e67a..20a7578c9 100644 --- a/api/apps/sdk/dataset.py +++ b/api/apps/sdk/dataset.py @@ -21,14 +21,13 @@ import json from flask import request from peewee import OperationalError from api import settings -from api.db import FileSource, StatusEnum from api.db.db_models import File from api.db.services.document_service import DocumentService from api.db.services.file2document_service import File2DocumentService from api.db.services.file_service import FileService from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.user_service import TenantService -from common.constants import RetCode +from common.constants import RetCode, FileSource, StatusEnum from api.utils.api_utils import ( deep_merge, get_error_argument_result, diff --git a/api/apps/sdk/dify_retrieval.py b/api/apps/sdk/dify_retrieval.py index 434e5dc5a..9380cc4f0 100644 --- a/api/apps/sdk/dify_retrieval.py +++ b/api/apps/sdk/dify_retrieval.py @@ -17,7 +17,6 @@ import logging from flask import request, jsonify -from api.db import LLMType from api.db.services.document_service import DocumentService from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.llm_service import LLMBundle @@ -25,7 +24,7 @@ from api import settings from api.utils.api_utils import validate_request, build_error_result, apikey_required from rag.app.tag import label_question from api.db.services.dialog_service import meta_filter, convert_conditions -from common.constants import RetCode +from common.constants import RetCode, LLMType @manager.route('/dify/retrieval', methods=['POST']) # noqa: F821 @apikey_required diff --git a/api/apps/sdk/doc.py b/api/apps/sdk/doc.py index f3605ed7c..f415db0cd 100644 --- a/api/apps/sdk/doc.py +++ b/api/apps/sdk/doc.py @@ -26,7 +26,7 @@ from pydantic import BaseModel, Field, validator from api import settings from api.constants import FILE_NAME_LEN_LIMIT -from api.db import FileSource, FileType, LLMType, ParserType, TaskStatus +from api.db import FileType from api.db.db_models import File, Task from api.db.services.document_service import DocumentService from api.db.services.file2document_service import File2DocumentService @@ -43,7 +43,7 @@ from rag.nlp import rag_tokenizer, search from rag.prompts.generator import cross_languages, keyword_extraction from rag.utils.storage_factory import STORAGE_IMPL from common.string_utils import remove_redundant_spaces -from common.constants import RetCode +from common.constants import RetCode, LLMType, ParserType, TaskStatus, FileSource MAXIMUM_OF_UPLOADING_FILES = 256 diff --git a/api/apps/sdk/session.py b/api/apps/sdk/session.py index 55cc7b58a..2997e1f00 100644 --- a/api/apps/sdk/session.py +++ b/api/apps/sdk/session.py @@ -22,7 +22,6 @@ from flask import Response, jsonify, request from agent.canvas import Canvas from api import settings -from api.db import LLMType, StatusEnum from api.db.db_models import APIToken from api.db.services.api_service import API4ConversationService from api.db.services.canvas_service import UserCanvasService, completion_openai @@ -41,7 +40,7 @@ from api.utils.api_utils import check_duplicate_ids, get_data_openai, get_error_ from rag.app.tag import label_question from rag.prompts.template import load_prompt from rag.prompts.generator import cross_languages, gen_meta_filter, keyword_extraction, chunks_format -from common.constants import RetCode +from common.constants import RetCode, LLMType, StatusEnum @manager.route("/chats//sessions", methods=["POST"]) # noqa: F821 @token_required diff --git a/api/apps/search_app.py b/api/apps/search_app.py index 18ff76dcf..799223371 100644 --- a/api/apps/search_app.py +++ b/api/apps/search_app.py @@ -18,13 +18,12 @@ from flask import request from flask_login import current_user, login_required from api.constants import DATASET_NAME_LIMIT -from api.db import StatusEnum from api.db.db_models import DB from api.db.services import duplicate_name from api.db.services.search_service import SearchService from api.db.services.user_service import TenantService, UserTenantService from common.misc_utils import get_uuid -from common.constants import RetCode +from common.constants import RetCode, StatusEnum from api.utils.api_utils import get_data_error_result, get_json_result, not_allowed_parameters, server_error_response, validate_request diff --git a/api/apps/tenant_app.py b/api/apps/tenant_app.py index 040df755e..ca2e982d3 100644 --- a/api/apps/tenant_app.py +++ b/api/apps/tenant_app.py @@ -19,11 +19,11 @@ from flask_login import login_required, current_user from api import settings from api.apps import smtp_mail_server -from api.db import UserTenantRole, StatusEnum +from api.db import UserTenantRole from api.db.db_models import UserTenant from api.db.services.user_service import UserTenantService, UserService -from common.constants import RetCode +from common.constants import RetCode, StatusEnum from common.misc_utils import get_uuid from common.time_utils import delta_seconds from api.utils.api_utils import get_json_result, validate_request, server_error_response, get_data_error_result diff --git a/api/db/__init__.py b/api/db/__init__.py index 827959452..c13c85de6 100644 --- a/api/db/__init__.py +++ b/api/db/__init__.py @@ -13,21 +13,11 @@ # See the License for the specific language governing permissions and # limitations under the License. # -from enum import Enum + from enum import IntEnum from strenum import StrEnum -class StatusEnum(Enum): - VALID = "1" - INVALID = "0" - - -class ActiveEnum(Enum): - ACTIVE = "1" - INACTIVE = "0" - - class UserTenantRole(StrEnum): OWNER = 'owner' ADMIN = 'admin' @@ -56,59 +46,6 @@ class FileType(StrEnum): VALID_FILE_TYPES = {FileType.PDF, FileType.DOC, FileType.VISUAL, FileType.AURAL, FileType.VIRTUAL, FileType.FOLDER, FileType.OTHER} -class LLMType(StrEnum): - CHAT = 'chat' - EMBEDDING = 'embedding' - SPEECH2TEXT = 'speech2text' - IMAGE2TEXT = 'image2text' - RERANK = 'rerank' - TTS = 'tts' - - -class TaskStatus(StrEnum): - UNSTART = "0" - RUNNING = "1" - CANCEL = "2" - DONE = "3" - FAIL = "4" - SCHEDULE = "5" - - -VALID_TASK_STATUS = {TaskStatus.UNSTART, TaskStatus.RUNNING, TaskStatus.CANCEL, TaskStatus.DONE, TaskStatus.FAIL, TaskStatus.SCHEDULE} - - -class ParserType(StrEnum): - PRESENTATION = "presentation" - LAWS = "laws" - MANUAL = "manual" - PAPER = "paper" - RESUME = "resume" - BOOK = "book" - QA = "qa" - TABLE = "table" - NAIVE = "naive" - PICTURE = "picture" - ONE = "one" - AUDIO = "audio" - EMAIL = "email" - KG = "knowledge_graph" - TAG = "tag" - - -class FileSource(StrEnum): - LOCAL = "" - KNOWLEDGEBASE = "knowledgebase" - S3 = "s3" - NOTION = "notion" - DISCORD = "discord" - CONFLUENCE = "confluence" - GMAIL = "gmail" - GOOGLE_DRIVER = "google_driver" - JIRA = "jira" - SHAREPOINT = "sharepoint" - SLACK = "slack" - TEAMS = "teams" - class InputType(StrEnum): LOAD_STATE = "load_state" # e.g. loading a current full state or a save state, such as from a file @@ -122,14 +59,6 @@ class CanvasCategory(StrEnum): DataFlow = "dataflow_canvas" -class MCPServerType(StrEnum): - SSE = "sse" - STREAMABLE_HTTP = "streamable-http" - - -VALID_MCP_SERVER_TYPES = {MCPServerType.SSE, MCPServerType.STREAMABLE_HTTP} - - class PipelineTaskType(StrEnum): PARSE = "Parse" DOWNLOAD = "Download" diff --git a/api/db/db_models.py b/api/db/db_models.py index a02984810..c11d0b7f9 100644 --- a/api/db/db_models.py +++ b/api/db/db_models.py @@ -32,12 +32,13 @@ from playhouse.migrate import MySQLMigrator, PostgresqlMigrator, migrate from playhouse.pool import PooledMySQLDatabase, PooledPostgresqlDatabase from api import settings, utils -from api.db import ParserType, SerializedType +from api.db import SerializedType from api.utils.json_encode import json_dumps, json_loads from api.utils.configs import deserialize_b64, serialize_b64 from common.time_utils import current_timestamp, timestamp_to_date, date_string_to_timestamp from common.decorator import singleton +from common.constants import ParserType CONTINUOUS_FIELD_TYPE = {IntegerField, FloatField, DateTimeField} diff --git a/api/db/init_data.py b/api/db/init_data.py index 78ef6cfc9..a520f2f41 100644 --- a/api/db/init_data.py +++ b/api/db/init_data.py @@ -20,7 +20,7 @@ import time import uuid from copy import deepcopy -from api.db import LLMType, UserTenantRole +from api.db import UserTenantRole from api.db.db_models import init_database_tables as init_web_db, LLMFactories, LLM, TenantLLM from api.db.services import UserService from api.db.services.canvas_service import CanvasTemplateService @@ -30,6 +30,7 @@ from api.db.services.tenant_llm_service import LLMFactoriesService, TenantLLMSer from api.db.services.llm_service import LLMService, LLMBundle, get_init_tenant_llm from api.db.services.user_service import TenantService, UserTenantService from api import settings +from common.constants import LLMType from common.file_utils import get_project_base_directory from api.common.base64 import encode_to_base64 diff --git a/api/db/joint_services/user_account_service.py b/api/db/joint_services/user_account_service.py index 61f23ccd5..733cb518d 100644 --- a/api/db/joint_services/user_account_service.py +++ b/api/db/joint_services/user_account_service.py @@ -18,7 +18,7 @@ import uuid from api import settings from api.utils.api_utils import group_by -from api.db import FileType, UserTenantRole, ActiveEnum +from api.db import FileType, UserTenantRole from api.db.services.api_service import APITokenService, API4ConversationService from api.db.services.canvas_service import UserCanvasService from api.db.services.conversation_service import ConversationService @@ -37,7 +37,7 @@ from api.db.services.user_canvas_version import UserCanvasVersionService from api.db.services.user_service import TenantService, UserService, UserTenantService from rag.utils.storage_factory import STORAGE_IMPL from rag.nlp import search - +from common.constants import ActiveEnum def create_new_user(user_info: dict) -> dict: """ diff --git a/api/db/services/connector_service.py b/api/db/services/connector_service.py index c51cb2e23..cadfc2b77 100644 --- a/api/db/services/connector_service.py +++ b/api/db/services/connector_service.py @@ -19,12 +19,13 @@ from datetime import datetime from anthropic import BaseModel from peewee import SQL, fn -from api.db import InputType, TaskStatus +from api.db import InputType from api.db.db_models import Connector, SyncLogs, Connector2Kb, Knowledgebase from api.db.services.common_service import CommonService from api.db.services.document_service import DocumentService from api.db.services.file_service import FileService from common.misc_utils import get_uuid +from common.constants import TaskStatus from common.time_utils import current_timestamp, timestamp_to_date diff --git a/api/db/services/conversation_service.py b/api/db/services/conversation_service.py index bd7f1d4b8..60f8e55b1 100644 --- a/api/db/services/conversation_service.py +++ b/api/db/services/conversation_service.py @@ -15,7 +15,7 @@ # import time from uuid import uuid4 -from api.db import StatusEnum +from common.constants import StatusEnum from api.db.db_models import Conversation, DB from api.db.services.api_service import API4ConversationService from api.db.services.common_service import CommonService diff --git a/api/db/services/dialog_service.py b/api/db/services/dialog_service.py index 93467e523..ec5dc523f 100644 --- a/api/db/services/dialog_service.py +++ b/api/db/services/dialog_service.py @@ -26,7 +26,7 @@ from langfuse import Langfuse from peewee import fn from agentic_reasoning import DeepResearcher from api import settings -from api.db import LLMType, ParserType, StatusEnum +from common.constants import LLMType, ParserType, StatusEnum from api.db.db_models import DB, Dialog from api.db.services.common_service import CommonService from api.db.services.document_service import DocumentService diff --git a/api/db/services/document_service.py b/api/db/services/document_service.py index a675548ff..5351e7d92 100644 --- a/api/db/services/document_service.py +++ b/api/db/services/document_service.py @@ -28,7 +28,7 @@ from peewee import fn, Case, JOIN from api import settings from api.constants import IMG_BASE64_PREFIX, FILE_NAME_LEN_LIMIT -from api.db import FileType, LLMType, ParserType, StatusEnum, TaskStatus, UserTenantRole, CanvasCategory +from api.db import FileType, UserTenantRole, CanvasCategory from api.db.db_models import DB, Document, Knowledgebase, Task, Tenant, UserTenant, File2Document, File, UserCanvas, \ User from api.db.db_utils import bulk_insert_into_db @@ -36,6 +36,7 @@ from api.db.services.common_service import CommonService from api.db.services.knowledgebase_service import KnowledgebaseService from common.misc_utils import get_uuid from common.time_utils import current_timestamp, get_format_time +from common.constants import LLMType, ParserType, StatusEnum, TaskStatus from rag.nlp import rag_tokenizer, search from rag.settings import get_svr_queue_name, SVR_CONSUMER_GROUP_NAME from rag.utils.redis_conn import REDIS_CONN diff --git a/api/db/services/file2document_service.py b/api/db/services/file2document_service.py index fbc186ea5..079ea783f 100644 --- a/api/db/services/file2document_service.py +++ b/api/db/services/file2document_service.py @@ -15,7 +15,7 @@ # from datetime import datetime -from api.db import FileSource +from common.constants import FileSource from api.db.db_models import DB from api.db.db_models import File, File2Document from api.db.services.common_service import CommonService diff --git a/api/db/services/file_service.py b/api/db/services/file_service.py index 6efdf0134..ed231dcc7 100644 --- a/api/db/services/file_service.py +++ b/api/db/services/file_service.py @@ -21,13 +21,14 @@ from pathlib import Path from flask_login import current_user from peewee import fn -from api.db import KNOWLEDGEBASE_FOLDER_NAME, FileSource, FileType, ParserType, TaskStatus +from api.db import KNOWLEDGEBASE_FOLDER_NAME, FileType from api.db.db_models import DB, Document, File, File2Document, Knowledgebase, Task from api.db.services import duplicate_name from api.db.services.common_service import CommonService from api.db.services.document_service import DocumentService from api.db.services.file2document_service import File2DocumentService from common.misc_utils import get_uuid +from common.constants import TaskStatus, FileSource, ParserType from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.task_service import TaskService from api.utils.file_utils import filename_type, read_potential_broken_pdf, thumbnail_img diff --git a/api/db/services/knowledgebase_service.py b/api/db/services/knowledgebase_service.py index 4dfe2b30a..7df7957b8 100644 --- a/api/db/services/knowledgebase_service.py +++ b/api/db/services/knowledgebase_service.py @@ -17,13 +17,14 @@ from datetime import datetime from peewee import fn, JOIN -from api.db import StatusEnum, TenantPermission +from api.db import TenantPermission from api.db.db_models import DB, Document, Knowledgebase, User, UserTenant, UserCanvas from api.db.services.common_service import CommonService from common.time_utils import current_timestamp, datetime_format from api.db.services import duplicate_name from api.db.services.user_service import TenantService from common.misc_utils import get_uuid +from common.constants import StatusEnum from api.constants import DATASET_NAME_LIMIT from api.utils.api_utils import get_parser_config, get_data_error_result @@ -91,7 +92,7 @@ class KnowledgebaseService(CommonService): # Returns: # If all documents are parsed successfully, returns (True, None) # If any document is not fully parsed, returns (False, error_message) - from api.db import TaskStatus + from common.constants import TaskStatus from api.db.services.document_service import DocumentService # Get knowledge base information diff --git a/api/db/services/search_service.py b/api/db/services/search_service.py index 2479af987..1c7687b54 100644 --- a/api/db/services/search_service.py +++ b/api/db/services/search_service.py @@ -17,7 +17,7 @@ from datetime import datetime from peewee import fn -from api.db import StatusEnum +from common.constants import StatusEnum from api.db.db_models import DB, Search, User from api.db.services.common_service import CommonService from common.time_utils import current_timestamp, datetime_format diff --git a/api/db/services/task_service.py b/api/db/services/task_service.py index 5fcca824f..0cc0b0a93 100644 --- a/api/db/services/task_service.py +++ b/api/db/services/task_service.py @@ -23,12 +23,13 @@ from api.db.db_utils import bulk_insert_into_db from deepdoc.parser import PdfParser from peewee import JOIN from api.db.db_models import DB, File2Document, File -from api.db import StatusEnum, FileType, TaskStatus +from api.db import FileType from api.db.db_models import Task, Document, Knowledgebase, Tenant from api.db.services.common_service import CommonService from api.db.services.document_service import DocumentService from common.misc_utils import get_uuid from common.time_utils import current_timestamp +from common.constants import StatusEnum, TaskStatus from deepdoc.parser.excel_parser import RAGFlowExcelParser from rag.settings import get_svr_queue_name from rag.utils.storage_factory import STORAGE_IMPL diff --git a/api/db/services/tenant_llm_service.py b/api/db/services/tenant_llm_service.py index d29363bc5..3233e2df6 100644 --- a/api/db/services/tenant_llm_service.py +++ b/api/db/services/tenant_llm_service.py @@ -17,7 +17,7 @@ import os import logging from langfuse import Langfuse from api import settings -from api.db import LLMType +from common.constants import LLMType from api.db.db_models import DB, LLMFactories, TenantLLM from api.db.services.common_service import CommonService from api.db.services.langfuse_service import TenantLangfuseService diff --git a/api/db/services/user_service.py b/api/db/services/user_service.py index 29ddf7fbd..50b46ce63 100644 --- a/api/db/services/user_service.py +++ b/api/db/services/user_service.py @@ -26,7 +26,7 @@ from api.db.db_models import User, Tenant from api.db.services.common_service import CommonService from common.misc_utils import get_uuid from common.time_utils import current_timestamp, datetime_format -from api.db import StatusEnum +from common.constants import StatusEnum from rag.settings import MINIO diff --git a/api/utils/api_utils.py b/api/utils/api_utils.py index 3a7a3a305..88cf7f5b9 100644 --- a/api/utils/api_utils.py +++ b/api/utils/api_utils.py @@ -35,7 +35,7 @@ from flask import ( from peewee import OperationalError from api import settings -from api.db import ActiveEnum +from common.constants import ActiveEnum from api.db.db_models import APIToken from api.utils.json_encode import CustomJSONEncoder from rag.utils.mcp_tool_call_conn import MCPToolCallSession, close_multiple_mcp_toolcall_sessions diff --git a/common/constants.py b/common/constants.py index 1c1606821..c40e84dbf 100644 --- a/common/constants.py +++ b/common/constants.py @@ -131,6 +131,12 @@ class PipelineTaskType(StrEnum): VALID_PIPELINE_TASK_TYPES = {PipelineTaskType.PARSE, PipelineTaskType.DOWNLOAD, PipelineTaskType.RAPTOR, PipelineTaskType.GRAPH_RAG, PipelineTaskType.MINDMAP} +class MCPServerType(StrEnum): + SSE = "sse" + STREAMABLE_HTTP = "streamable-http" + +VALID_MCP_SERVER_TYPES = {MCPServerType.SSE, MCPServerType.STREAMABLE_HTTP} + # environment # ENV_STRONG_TEST_COUNT = "STRONG_TEST_COUNT" # ENV_RAGFLOW_SECRET_KEY = "RAGFLOW_SECRET_KEY" diff --git a/deepdoc/parser/figure_parser.py b/deepdoc/parser/figure_parser.py index b71ece121..a913822c3 100644 --- a/deepdoc/parser/figure_parser.py +++ b/deepdoc/parser/figure_parser.py @@ -17,7 +17,7 @@ from concurrent.futures import ThreadPoolExecutor, as_completed from PIL import Image -from api.db import LLMType +from common.constants import LLMType from api.db.services.llm_service import LLMBundle from common.connection_utils import timeout from rag.app.picture import vision_llm_chunk as picture_vision_llm_chunk diff --git a/graphrag/general/smoke.py b/graphrag/general/smoke.py index 5f9fe1437..7023df412 100644 --- a/graphrag/general/smoke.py +++ b/graphrag/general/smoke.py @@ -21,7 +21,7 @@ import networkx as nx import trio from api import settings -from api.db import LLMType +from common.constants import LLMType from api.db.services.document_service import DocumentService from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.llm_service import LLMBundle diff --git a/graphrag/light/smoke.py b/graphrag/light/smoke.py index f8f505f65..ec83ab6cf 100644 --- a/graphrag/light/smoke.py +++ b/graphrag/light/smoke.py @@ -21,7 +21,7 @@ import networkx as nx import logging import trio -from api.db import LLMType +from common.constants import LLMType from api.db.services.document_service import DocumentService from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.llm_service import LLMBundle diff --git a/graphrag/search.py b/graphrag/search.py index cdc7e785f..e54c70167 100644 --- a/graphrag/search.py +++ b/graphrag/search.py @@ -315,7 +315,7 @@ class KGSearch(Dealer): if __name__ == "__main__": from api import settings import argparse - from api.db import LLMType + from common.constants import LLMType from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.llm_service import LLMBundle from api.db.services.user_service import TenantService diff --git a/rag/app/audio.py b/rag/app/audio.py index e8a1d2655..86fa759aa 100644 --- a/rag/app/audio.py +++ b/rag/app/audio.py @@ -18,7 +18,7 @@ import os import re import tempfile -from api.db import LLMType +from common.constants import LLMType from api.db.services.llm_service import LLMBundle from rag.nlp import rag_tokenizer, tokenize diff --git a/rag/app/laws.py b/rag/app/laws.py index 4e398a1de..1269ee9d8 100644 --- a/rag/app/laws.py +++ b/rag/app/laws.py @@ -20,7 +20,7 @@ import re from io import BytesIO from docx import Document -from api.db import ParserType +from common.constants import ParserType from deepdoc.parser.utils import get_text from rag.nlp import bullets_category, remove_contents_table, \ make_colon_as_title, tokenize_chunks, docx_question_level, tree_merge diff --git a/rag/app/manual.py b/rag/app/manual.py index e093ac490..cf97bfcb9 100644 --- a/rag/app/manual.py +++ b/rag/app/manual.py @@ -18,7 +18,7 @@ import logging import copy import re -from api.db import ParserType +from common.constants import ParserType from io import BytesIO from rag.nlp import rag_tokenizer, tokenize, tokenize_table, bullets_category, title_frequency, tokenize_chunks, docx_question_level from common.token_utils import num_tokens_from_string diff --git a/rag/app/naive.py b/rag/app/naive.py index 7875bbe6a..12af18c0f 100644 --- a/rag/app/naive.py +++ b/rag/app/naive.py @@ -28,7 +28,7 @@ from markdown import markdown from PIL import Image from tika import parser -from api.db import LLMType +from common.constants import LLMType from api.db.services.llm_service import LLMBundle from rag.utils.file_utils import extract_embed_file, extract_links_from_pdf, extract_links_from_docx, extract_html from deepdoc.parser import DocxParser, ExcelParser, HtmlParser, JsonParser, MarkdownElementExtractor, MarkdownParser, PdfParser, TxtParser diff --git a/rag/app/paper.py b/rag/app/paper.py index a8f29c82e..d95976c9f 100644 --- a/rag/app/paper.py +++ b/rag/app/paper.py @@ -19,7 +19,7 @@ import copy import re from deepdoc.parser.figure_parser import vision_figure_parser_pdf_wrapper -from api.db import ParserType +from common.constants import ParserType from rag.nlp import rag_tokenizer, tokenize, tokenize_table, add_positions, bullets_category, title_frequency, tokenize_chunks from deepdoc.parser import PdfParser, PlainParser import numpy as np diff --git a/rag/app/picture.py b/rag/app/picture.py index 86092c0f7..7a08ad4f0 100644 --- a/rag/app/picture.py +++ b/rag/app/picture.py @@ -20,7 +20,7 @@ import re import numpy as np from PIL import Image -from api.db import LLMType +from common.constants import LLMType from api.db.services.llm_service import LLMBundle from deepdoc.vision import OCR from rag.nlp import rag_tokenizer, tokenize diff --git a/rag/app/presentation.py b/rag/app/presentation.py index 148e73c26..8f168e1c4 100644 --- a/rag/app/presentation.py +++ b/rag/app/presentation.py @@ -20,7 +20,7 @@ from io import BytesIO from PIL import Image -from api.db import LLMType +from common.constants import LLMType from api.db.services.llm_service import LLMBundle from deepdoc.parser.pdf_parser import VisionParser from rag.nlp import tokenize, is_english diff --git a/rag/benchmark.py b/rag/benchmark.py index 7a9ad1ae2..173fcd140 100644 --- a/rag/benchmark.py +++ b/rag/benchmark.py @@ -20,7 +20,7 @@ import time import argparse from collections import defaultdict -from api.db import LLMType +from common.constants import LLMType from api.db.services.llm_service import LLMBundle from api.db.services.knowledgebase_service import KnowledgebaseService from api import settings diff --git a/rag/flow/parser/parser.py b/rag/flow/parser/parser.py index 2c176bdff..28aaf600c 100644 --- a/rag/flow/parser/parser.py +++ b/rag/flow/parser/parser.py @@ -22,7 +22,7 @@ import trio import numpy as np from PIL import Image -from api.db import LLMType +from common.constants import LLMType from api.db.services.file2document_service import File2DocumentService from api.db.services.file_service import FileService from api.db.services.llm_service import LLMBundle diff --git a/rag/flow/tokenizer/tokenizer.py b/rag/flow/tokenizer/tokenizer.py index ee4b277fc..2cb120e9f 100644 --- a/rag/flow/tokenizer/tokenizer.py +++ b/rag/flow/tokenizer/tokenizer.py @@ -19,7 +19,7 @@ import re import numpy as np import trio -from api.db import LLMType +from common.constants import LLMType from api.db.services.knowledgebase_service import KnowledgebaseService from api.db.services.llm_service import LLMBundle from api.db.services.user_service import TenantService diff --git a/rag/prompts/generator.py b/rag/prompts/generator.py index 8cb69dcef..abd54f9d4 100644 --- a/rag/prompts/generator.py +++ b/rag/prompts/generator.py @@ -201,7 +201,7 @@ def question_proposal(chat_mdl, content, topn=3): def full_question(tenant_id=None, llm_id=None, messages=[], language=None, chat_mdl=None): - from api.db import LLMType + from common.constants import LLMType from api.db.services.llm_service import LLMBundle from api.db.services.tenant_llm_service import TenantLLMService @@ -235,7 +235,7 @@ def full_question(tenant_id=None, llm_id=None, messages=[], language=None, chat_ def cross_languages(tenant_id, llm_id, query, languages=[]): - from api.db import LLMType + from common.constants import LLMType from api.db.services.llm_service import LLMBundle from api.db.services.tenant_llm_service import TenantLLMService diff --git a/rag/svr/sync_data_source.py b/rag/svr/sync_data_source.py index 471858b7e..f2db3af06 100644 --- a/rag/svr/sync_data_source.py +++ b/rag/svr/sync_data_source.py @@ -36,7 +36,7 @@ import tracemalloc import signal import trio import faulthandler -from api.db import FileSource, TaskStatus +from common.constants import FileSource, TaskStatus from api import settings from api.versions import get_ragflow_version from common.data_source.confluence_connector import ConfluenceConnector diff --git a/rag/svr/task_executor.py b/rag/svr/task_executor.py index fb3efac10..ad71799ad 100644 --- a/rag/svr/task_executor.py +++ b/rag/svr/task_executor.py @@ -52,7 +52,7 @@ import exceptiongroup import faulthandler import numpy as np from peewee import DoesNotExist -from api.db import LLMType, ParserType, PipelineTaskType +from common.constants import LLMType, ParserType, PipelineTaskType from api.db.services.document_service import DocumentService from api.db.services.llm_service import LLMBundle from api.db.services.task_service import TaskService, has_canceled, CANVAS_DEBUG_DOC_ID, GRAPH_RAPTOR_FAKE_DOC_ID diff --git a/rag/utils/constants.py b/rag/utils/constants.py deleted file mode 100644 index 7141a8f04..000000000 --- a/rag/utils/constants.py +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright 2025 The InfiniFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -from enum import StrEnum - -class MCPServerType(StrEnum): - SSE = "sse" - STREAMABLE_HTTP = "streamable-http" - -VALID_MCP_SERVER_TYPES = {MCPServerType.SSE, MCPServerType.STREAMABLE_HTTP} \ No newline at end of file diff --git a/rag/utils/mcp_tool_call_conn.py b/rag/utils/mcp_tool_call_conn.py index 4af726149..93d678ae6 100644 --- a/rag/utils/mcp_tool_call_conn.py +++ b/rag/utils/mcp_tool_call_conn.py @@ -25,7 +25,7 @@ from typing import Any, Literal from typing_extensions import override -from api.db import MCPServerType +from common.constants import MCPServerType from mcp.client.session import ClientSession from mcp.client.sse import sse_client from mcp.client.streamable_http import streamablehttp_client