diff --git a/admin/client/admin_client.py b/admin/client/admin_client.py index 4a792f6a4..261698ebf 100644 --- a/admin/client/admin_client.py +++ b/admin/client/admin_client.py @@ -52,6 +52,7 @@ sql_command: list_services | revoke_permission | alter_user_role | show_user_permission + | show_version // meta command definition meta_command: "\\" meta_command_name [meta_args] @@ -93,6 +94,7 @@ FOR: "FOR"i RESOURCES: "RESOURCES"i ON: "ON"i SET: "SET"i +VERSION: "VERSION"i list_services: LIST SERVICES ";" show_service: SHOW SERVICE NUMBER ";" @@ -121,6 +123,8 @@ revoke_permission: REVOKE action_list ON identifier FROM ROLE identifier ";" alter_user_role: ALTER USER quoted_string SET ROLE identifier ";" show_user_permission: SHOW USER PERMISSION quoted_string ";" +show_version: SHOW VERSION ";" + action_list: identifier ("," identifier)* identifier: WORD @@ -247,6 +251,9 @@ class AdminTransformer(Transformer): user_name = items[3] return {"type": "show_user_permission", "user_name": user_name} + def show_version(self, items): + return {"type": "show_version"} + def action_list(self, items): return items @@ -556,6 +563,8 @@ class AdminCLI(Cmd): self._alter_user_role(command_dict) case 'show_user_permission': self._show_user_permission(command_dict) + case 'show_version': + self._show_version(command_dict) case 'meta': self._handle_meta_command(command_dict) case _: @@ -862,6 +871,16 @@ class AdminCLI(Cmd): print( f"Fail to show user: {user_name_str} permission, code: {res_json['code']}, message: {res_json['message']}") + def _show_version(self, command): + print("show_version") + url = f'http://{self.host}:{self.port}/api/v1/admin/version' + response = self.session.get(url) + res_json = response.json() + if response.status_code == 200: + self._print_table_simple(res_json['data']) + else: + print(f"Fail to show version, code: {res_json['code']}, message: {res_json['message']}") + def _handle_meta_command(self, command): meta_command = command['command'] args = command.get('args', []) diff --git a/admin/server/admin_server.py b/admin/server/admin_server.py index 6580fafd2..cfc5c4bee 100644 --- a/admin/server/admin_server.py +++ b/admin/server/admin_server.py @@ -31,6 +31,7 @@ from config import load_configurations, SERVICE_CONFIGS from auth import init_default_admin, setup_auth from flask_session import Session from flask_login import LoginManager +from common.versions import get_ragflow_version stop_event = threading.Event() @@ -52,6 +53,7 @@ if __name__ == '__main__': os.environ.get("MAX_CONTENT_LENGTH", 1024 * 1024 * 1024) ) Session(app) + logging.info(f'RAGFlow version: {get_ragflow_version()}') show_configs() login_manager = LoginManager() login_manager.init_app(app) diff --git a/admin/server/routes.py b/admin/server/routes.py index 723569590..2c70fbd7a 100644 --- a/admin/server/routes.py +++ b/admin/server/routes.py @@ -24,6 +24,7 @@ from responses import success_response, error_response from services import UserMgr, ServiceMgr, UserServiceMgr from roles import RoleMgr from api.common.exceptions import AdminException +from common.versions import get_ragflow_version admin_bp = Blueprint('admin', __name__, url_prefix='/api/v1/admin') @@ -369,3 +370,13 @@ def get_user_permission(user_name: str): return success_response(res) except Exception as e: return error_response(str(e), 500) + +@admin_bp.route('/version', methods=['GET']) +@login_required +@check_admin_auth +def show_version(): + try: + res = {"version": get_ragflow_version()} + return success_response(res) + except Exception as e: + return error_response(str(e), 500) diff --git a/api/apps/auth/github.py b/api/apps/auth/github.py index 5d46b277d..f48d4a5fc 100644 --- a/api/apps/auth/github.py +++ b/api/apps/auth/github.py @@ -34,7 +34,7 @@ class GithubOAuthClient(OAuthClient): def fetch_user_info(self, access_token, **kwargs): """ - Fetch github user info. + Fetch GitHub user info. """ user_info = {} try: diff --git a/api/apps/auth/oidc.py b/api/apps/auth/oidc.py index 9c59ffaeb..cafcaadfd 100644 --- a/api/apps/auth/oidc.py +++ b/api/apps/auth/oidc.py @@ -43,7 +43,8 @@ class OIDCClient(OAuthClient): self.jwks_uri = config['jwks_uri'] - def _load_oidc_metadata(self, issuer): + @staticmethod + def _load_oidc_metadata(issuer): """ Load OIDC metadata from `/.well-known/openid-configuration`. """ diff --git a/api/apps/sdk/agent.py b/api/apps/sdk/agents.py similarity index 100% rename from api/apps/sdk/agent.py rename to api/apps/sdk/agents.py diff --git a/api/apps/system_app.py b/api/apps/system_app.py index 1704ecedd..b63f80a6a 100644 --- a/api/apps/system_app.py +++ b/api/apps/system_app.py @@ -29,7 +29,7 @@ from api.utils.api_utils import ( server_error_response, generate_confirmation_token, ) -from api.versions import get_ragflow_version +from common.versions import get_ragflow_version from common.time_utils import current_timestamp, datetime_format from timeit import default_timer as timer diff --git a/api/db/runtime_config.py b/api/db/runtime_config.py index e3e0fb787..a3d7680bc 100644 --- a/api/db/runtime_config.py +++ b/api/db/runtime_config.py @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -from api.versions import get_ragflow_version +from common.versions import get_ragflow_version from .reload_config_base import ReloadConfigBase diff --git a/api/ragflow_server.py b/api/ragflow_server.py index d58ef09c6..868e054ae 100644 --- a/api/ragflow_server.py +++ b/api/ragflow_server.py @@ -39,7 +39,7 @@ from common.file_utils import get_project_base_directory from common import settings from api.db.db_models import init_database_tables as init_web_db from api.db.init_data import init_web_data -from api.versions import get_ragflow_version +from common.versions import get_ragflow_version from common.config_utils import show_configs from rag.utils.mcp_tool_call_conn import shutdown_all_mcp_sessions from rag.utils.redis_conn import RedisDistributedLock diff --git a/api/versions.py b/common/versions.py similarity index 95% rename from api/versions.py rename to common/versions.py index 6009b06f4..082927c58 100644 --- a/api/versions.py +++ b/common/versions.py @@ -1,5 +1,5 @@ # -# Copyright 2024 The InfiniFlow Authors. All Rights Reserved. +# 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. diff --git a/rag/svr/sync_data_source.py b/rag/svr/sync_data_source.py index ddf4adb8e..f98693f6f 100644 --- a/rag/svr/sync_data_source.py +++ b/rag/svr/sync_data_source.py @@ -37,7 +37,7 @@ import trio import faulthandler from common.constants import FileSource, TaskStatus from common import settings -from api.versions import get_ragflow_version +from common.versions import get_ragflow_version from common.data_source.confluence_connector import ConfluenceConnector from common.data_source.utils import load_all_docs_from_checkpoint_connector from common.signal_utils import start_tracemalloc_and_snapshot, stop_tracemalloc diff --git a/rag/svr/task_executor.py b/rag/svr/task_executor.py index 9b3a68ce0..d0d9e27c5 100644 --- a/rag/svr/task_executor.py +++ b/rag/svr/task_executor.py @@ -55,7 +55,7 @@ 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 from api.db.services.file2document_service import File2DocumentService -from api.versions import get_ragflow_version +from common.versions import get_ragflow_version from api.db.db_models import close_connection from rag.app import laws, paper, presentation, manual, qa, table, book, resume, picture, naive, one, audio, \ email, tag