diff --git a/backend/apps/config_app.py b/backend/apps/config_app.py index 735ef7ca5..af1774922 100644 --- a/backend/apps/config_app.py +++ b/backend/apps/config_app.py @@ -18,7 +18,7 @@ from apps.image_app import router as proxy_router from apps.knowledge_summary_app import router as summary_router from apps.mock_user_management_app import router as mock_user_management_router -from apps.model_managment_app import router as model_manager_router +from apps.model_management_app import router as model_manager_router from apps.oauth_app import router as oauth_router from apps.prompt_app import router as prompt_router from apps.prompt_template_app import router as prompt_template_router diff --git a/backend/apps/model_managment_app.py b/backend/apps/model_management_app.py similarity index 100% rename from backend/apps/model_managment_app.py rename to backend/apps/model_management_app.py diff --git a/doc/docs/en/backend/overview.md b/doc/docs/en/backend/overview.md index 3a11eef22..e4d08b3fb 100644 --- a/doc/docs/en/backend/overview.md +++ b/doc/docs/en/backend/overview.md @@ -23,7 +23,7 @@ backend/ │ ├── conversation_management_app.py # Conversation management APIs │ ├── conversation_share_app.py # Conversation sharing APIs │ ├── vectordatabase_app.py # Knowledge base retrieval APIs -│ ├── model_managment_app.py # Model management APIs (capacity suggestions / concurrency governance) +│ ├── model_management_app.py # Model management APIs (capacity suggestions / concurrency governance) │ ├── voice_app.py # Voice APIs (STT/TTS WebSocket) │ ├── file_management_app.py # File management APIs (upload / preview / signed URLs) │ ├── remote_mcp_app.py # MCP service and API→MCP conversion APIs (/mcp) diff --git a/doc/docs/en/getting-started/software-architecture.md b/doc/docs/en/getting-started/software-architecture.md index 252f89da1..60a3a8ca8 100644 --- a/doc/docs/en/getting-started/software-architecture.md +++ b/doc/docs/en/getting-started/software-architecture.md @@ -33,7 +33,7 @@ The backend implements a clean layered architecture: - `agent_app.py` - Agent CRUD, version management, streaming execution - `conversation_management_app.py` - Multi-turn dialogue, history tracking - `api_key_app.py` / `quota_app.py` - API key and capacity management - - `model_managment_app.py` - Model configuration, health checks + - `model_management_app.py` - Model configuration, health checks - `skill_app.py` - Skill creation and management - `knowledge_summary_app.py` - Knowledge base operations - `remote_mcp_app.py` - Remote MCP tool management diff --git a/doc/docs/en/testing/backend.md b/doc/docs/en/testing/backend.md index dd7db4fbb..e79f0a800 100644 --- a/doc/docs/en/testing/backend.md +++ b/doc/docs/en/testing/backend.md @@ -21,7 +21,7 @@ test/backend/ │ ├── test_file_management_app.py │ ├── test_image_app.py │ ├── test_knowledge_summary_app.py -│ ├── test_model_managment_app.py +│ ├── test_model_management_app.py │ ├── test_northbound_app.py │ ├── test_prompt_app.py │ ├── test_remote_mcp_app.py diff --git a/doc/docs/zh/backend/overview.md b/doc/docs/zh/backend/overview.md index 5905c138e..33d87eb6d 100644 --- a/doc/docs/zh/backend/overview.md +++ b/doc/docs/zh/backend/overview.md @@ -23,7 +23,7 @@ backend/ │ ├── conversation_management_app.py # 对话管理 API │ ├── conversation_share_app.py # 会话分享 API │ ├── vectordatabase_app.py # 知识库检索 API -│ ├── model_managment_app.py # 模型管理 API(含容量建议/并发治理) +│ ├── model_management_app.py # 模型管理 API(含容量建议/并发治理) │ ├── voice_app.py # 语音 API(STT/TTS WebSocket) │ ├── file_management_app.py # 文件管理 API(上传/预览/签名URL) │ ├── remote_mcp_app.py # MCP 服务与 API→MCP 转换 API(/mcp) diff --git a/doc/docs/zh/getting-started/software-architecture.md b/doc/docs/zh/getting-started/software-architecture.md index 4356d878c..11675a594 100644 --- a/doc/docs/zh/getting-started/software-architecture.md +++ b/doc/docs/zh/getting-started/software-architecture.md @@ -33,7 +33,7 @@ Nexent 的软件架构遵循分层设计原则,从上到下分为以下几个 - `agent_app.py` - 智能体 CRUD、版本管理、流式执行 - `conversation_management_app.py` - 多轮对话、历史追踪 - `api_key_app.py` / `quota_app.py` - API Key 与容量管理 - - `model_managment_app.py` - 模型配置、健康检查 + - `model_management_app.py` - 模型配置、健康检查 - `skill_app.py` - 技能创建与管理 - `knowledge_summary_app.py` - 知识库操作 - `remote_mcp_app.py` - 远程 MCP 工具管理 diff --git a/doc/docs/zh/testing/backend.md b/doc/docs/zh/testing/backend.md index 8ece10808..752cf0b36 100644 --- a/doc/docs/zh/testing/backend.md +++ b/doc/docs/zh/testing/backend.md @@ -21,7 +21,7 @@ test/backend/ │ ├── test_file_management_app.py │ ├── test_image_app.py │ ├── test_knowledge_summary_app.py -│ ├── test_model_managment_app.py +│ ├── test_model_management_app.py │ ├── test_northbound_app.py │ ├── test_prompt_app.py │ ├── test_remote_mcp_app.py diff --git a/test/backend/app/test_config_app.py b/test/backend/app/test_config_app.py index 5eb707969..06301bf1c 100644 --- a/test/backend/app/test_config_app.py +++ b/test/backend/app/test_config_app.py @@ -130,7 +130,7 @@ def refresh_api_key(): "apps.image_app": {"router": APIRouter()}, "apps.knowledge_summary_app": {"router": APIRouter()}, "apps.mock_user_management_app": {"router": APIRouter()}, - "apps.model_managment_app": {"router": APIRouter()}, + "apps.model_management_app": {"router": APIRouter()}, "apps.oauth_app": {"router": APIRouter()}, "apps.prompt_app": {"router": APIRouter()}, "apps.prompt_template_app": {"router": APIRouter()}, diff --git a/test/backend/app/test_model_managment_app.py b/test/backend/app/test_model_management_app.py similarity index 82% rename from test/backend/app/test_model_managment_app.py rename to test/backend/app/test_model_management_app.py index feb24c668..3f9e30229 100644 --- a/test/backend/app/test_model_managment_app.py +++ b/test/backend/app/test_model_management_app.py @@ -48,7 +48,7 @@ def _get_vector_db_core(): # minimal stub _sys.modules["management.services.knowledge_base.service"] = services_vdb_mod # Import after mocking (only backend path is required by app imports) - from backend.apps.model_managment_app import router + from backend.apps.model_management_app import router # Create test client app = FastAPI() @@ -87,9 +87,9 @@ async def test_suggest_capacity_success(client, auth_header, user_credentials, m """Test standalone capacity suggestion endpoint.""" from backend.consts.model import CapacitySuggestionFields, ModelCapacitySuggestionResponse - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_suggest = mocker.patch( - 'backend.apps.model_managment_app._suggest_capacity_for_request', + 'backend.apps.model_management_app._suggest_capacity_for_request', return_value=ModelCapacitySuggestionResponse( suggestions=CapacitySuggestionFields( context_window_tokens=128000, @@ -140,7 +140,7 @@ async def test_suggest_capacity_real_serialization_uses_envelope(client, auth_he every existing unit test because nothing exercised the real backend-to-wire format. """ - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) response = client.post( "/model/suggest-capacity", @@ -182,9 +182,9 @@ async def test_capacity_coverage_real_serialization_uses_envelope(client, auth_h service layer but lets the route serialize a real dict through JSONResponse so the envelope contract is enforced at the wire boundary. """ - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mocker.patch( - 'backend.apps.model_managment_app.get_capacity_coverage', + 'backend.apps.model_management_app.get_capacity_coverage', return_value={ "total_llm_vlm": 3, "bare_count": 1, @@ -219,9 +219,9 @@ async def test_capacity_coverage_real_serialization_uses_envelope(client, auth_h @pytest.mark.asyncio async def test_suggest_capacity_bad_request(client, auth_header, user_credentials, mocker): """Test standalone capacity suggestion endpoint maps invalid input to 400.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mocker.patch( - 'backend.apps.model_managment_app._suggest_capacity_for_request', + 'backend.apps.model_management_app._suggest_capacity_for_request', side_effect=ValueError("model_name is required"), ) @@ -238,9 +238,9 @@ async def test_suggest_capacity_bad_request(client, auth_header, user_credential @pytest.mark.asyncio async def test_capacity_coverage_success(client, auth_header, user_credentials, mocker): """Test capacity coverage endpoint uses current tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_coverage = mocker.patch( - 'backend.apps.model_managment_app.get_capacity_coverage', + 'backend.apps.model_management_app.get_capacity_coverage', return_value={ "total_llm_vlm": 2, "bare_count": 1, @@ -274,12 +274,12 @@ async def test_capacity_coverage_success(client, auth_header, user_credentials, @pytest.mark.asyncio async def test_create_model_success(client, auth_header, user_credentials, sample_model_data, mocker): """Test successful model creation.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _create(*args, **kwargs): return None - mock_create = mocker.patch('backend.apps.model_managment_app.create_model_for_tenant', side_effect=_create) + mock_create = mocker.patch('backend.apps.model_management_app.create_model_for_tenant', side_effect=_create) response = client.post( "/model/create", json=sample_model_data, headers=auth_header) @@ -297,13 +297,13 @@ async def test_create_model_records_accept_signal_when_present(client, auth_head fields before the DB write, and (2) call the metric recorder so model_capacity_suggestion_accept_total increments. Spec L709-710. """ - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _create(*args, **kwargs): return None - mock_create = mocker.patch('backend.apps.model_managment_app.create_model_for_tenant', side_effect=_create) - mock_record = mocker.patch('backend.apps.model_managment_app._record_capacity_suggestion_accept') + mock_create = mocker.patch('backend.apps.model_management_app.create_model_for_tenant', side_effect=_create) + mock_record = mocker.patch('backend.apps.model_management_app._record_capacity_suggestion_accept') payload = { **sample_model_data, @@ -337,13 +337,13 @@ async def test_create_model_skips_accept_recorder_without_match_kind(client, aut Otherwise accept_total inflates and the SLO ratio against dispatch_profile_hit_total becomes meaningless. """ - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _create(*args, **kwargs): return None - mocker.patch('backend.apps.model_managment_app.create_model_for_tenant', side_effect=_create) - mock_record = mocker.patch('backend.apps.model_managment_app._record_capacity_suggestion_accept') + mocker.patch('backend.apps.model_management_app.create_model_for_tenant', side_effect=_create) + mock_record = mocker.patch('backend.apps.model_management_app._record_capacity_suggestion_accept') response = client.post("/model/create", json=sample_model_data, headers=auth_header) @@ -354,10 +354,10 @@ async def _create(*args, **kwargs): @pytest.mark.asyncio async def test_create_model_conflict(client, auth_header, user_credentials, sample_model_data, mocker): """Test model creation with name conflict.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_create = mocker.patch( - 'backend.apps.model_managment_app.create_model_for_tenant', + 'backend.apps.model_management_app.create_model_for_tenant', side_effect=ValueError("Name 'Test Model' is already in use, please choose another display name") ) @@ -374,10 +374,10 @@ async def test_create_model_conflict(client, auth_header, user_credentials, samp @pytest.mark.asyncio async def test_create_model_exception(client, auth_header, user_credentials, sample_model_data, mocker): """Test model creation with internal error.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_create = mocker.patch( - 'backend.apps.model_managment_app.create_model_for_tenant', + 'backend.apps.model_management_app.create_model_for_tenant', side_effect=Exception("DB failure") ) @@ -395,10 +395,10 @@ async def test_create_model_exception(client, auth_header, user_credentials, sam @pytest.mark.asyncio async def test_create_provider_model_success(client, auth_header, user_credentials, mocker): """Test successful provider model creation.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_get = mocker.patch( - 'backend.apps.model_managment_app.create_provider_models_for_tenant', + 'backend.apps.model_management_app.create_provider_models_for_tenant', return_value=[{"id": "A1"}, {"id": "a0"}, {"id": "b2"}, {"id": "c3"}] ) @@ -418,10 +418,10 @@ async def test_create_provider_model_success(client, auth_header, user_credentia @pytest.mark.asyncio async def test_create_provider_model_exception(client, auth_header, user_credentials, mocker): """Test provider model creation with exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_get = mocker.patch( - 'backend.apps.model_managment_app.create_provider_models_for_tenant', + 'backend.apps.model_management_app.create_provider_models_for_tenant', side_effect=Exception("Provider API error") ) @@ -441,12 +441,12 @@ async def test_create_provider_model_exception(client, auth_header, user_credent @pytest.mark.asyncio async def test_provider_batch_create_success(client, auth_header, user_credentials, mocker): """Test successful batch model creation.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _batch(*args, **kwargs): return None - mock_batch = mocker.patch('backend.apps.model_managment_app.batch_create_models_for_tenant', side_effect=_batch) + mock_batch = mocker.patch('backend.apps.model_management_app.batch_create_models_for_tenant', side_effect=_batch) payload = { "models": [{"id": "prov/modelA"}], @@ -466,10 +466,10 @@ async def _batch(*args, **kwargs): @pytest.mark.asyncio async def test_provider_batch_create_exception(client, auth_header, user_credentials, mocker): """Test batch model creation with exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_batch = mocker.patch( - 'backend.apps.model_managment_app.batch_create_models_for_tenant', + 'backend.apps.model_management_app.batch_create_models_for_tenant', side_effect=Exception("boom") ) @@ -499,7 +499,7 @@ async def test_provider_batch_create_strips_accept_signal_and_records( counter fires once per accepted row after the persist call succeeds. """ mocker.patch( - 'backend.apps.model_managment_app.get_current_user_id', + 'backend.apps.model_management_app.get_current_user_id', return_value=user_credentials, ) @@ -507,11 +507,11 @@ async def _batch(*args, **kwargs): return None mock_batch = mocker.patch( - 'backend.apps.model_managment_app.batch_create_models_for_tenant', + 'backend.apps.model_management_app.batch_create_models_for_tenant', side_effect=_batch, ) mock_record = mocker.patch( - 'backend.apps.model_managment_app._record_capacity_suggestion_accept' + 'backend.apps.model_management_app._record_capacity_suggestion_accept' ) payload = { @@ -542,12 +542,12 @@ async def _batch(*args, **kwargs): @pytest.mark.asyncio async def test_delete_model_success(client, auth_header, user_credentials, mocker): """Test successful model deletion.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _delete(*args, **kwargs): return "Test Model" - mock_del = mocker.patch('backend.apps.model_managment_app.delete_model_for_tenant', side_effect=_delete) + mock_del = mocker.patch('backend.apps.model_management_app.delete_model_for_tenant', side_effect=_delete) response = client.post( "/model/delete", params={"display_name": "Test Model"}, headers=auth_header) @@ -562,10 +562,10 @@ async def _delete(*args, **kwargs): @pytest.mark.asyncio async def test_delete_model_not_found(client, auth_header, user_credentials, mocker): """Test model deletion when model not found.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_del = mocker.patch( - 'backend.apps.model_managment_app.delete_model_for_tenant', + 'backend.apps.model_management_app.delete_model_for_tenant', side_effect=LookupError("Model not found: Missing") ) @@ -583,7 +583,7 @@ async def test_delete_model_not_found(client, auth_header, user_credentials, moc @pytest.mark.asyncio async def test_get_model_list_success(client, auth_header, user_credentials, mocker): """Test successful model list retrieval.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_models(*args, **kwargs): return [ @@ -603,7 +603,7 @@ async def mock_list_models(*args, **kwargs): } ] - mock_list = mocker.patch('backend.apps.model_managment_app.list_models_for_tenant', side_effect=mock_list_models) + mock_list = mocker.patch('backend.apps.model_management_app.list_models_for_tenant', side_effect=mock_list_models) response = client.get("/model/list", headers=auth_header) @@ -621,7 +621,7 @@ async def mock_list_models(*args, **kwargs): @pytest.mark.asyncio async def test_get_llm_model_list_success(client, auth_header, user_credentials, mocker): """Test successful LLM model list retrieval.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_llm_models(*args, **kwargs): return [ @@ -639,7 +639,7 @@ async def mock_list_llm_models(*args, **kwargs): } ] - mock_list = mocker.patch('backend.apps.model_managment_app.list_llm_models_for_tenant', side_effect=mock_list_llm_models) + mock_list = mocker.patch('backend.apps.model_management_app.list_llm_models_for_tenant', side_effect=mock_list_llm_models) response = client.get("/model/llm_list", headers=auth_header) @@ -657,12 +657,12 @@ async def mock_list_llm_models(*args, **kwargs): @pytest.mark.asyncio async def test_get_llm_model_list_exception(client, auth_header, user_credentials, mocker): """Test LLM model list retrieval with exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_llm_models(*args, **kwargs): raise Exception("Database connection error") - mocker.patch('backend.apps.model_managment_app.list_llm_models_for_tenant', side_effect=mock_list_llm_models) + mocker.patch('backend.apps.model_management_app.list_llm_models_for_tenant', side_effect=mock_list_llm_models) response = client.get("/model/llm_list", headers=auth_header) @@ -675,12 +675,12 @@ async def mock_list_llm_models(*args, **kwargs): @pytest.mark.asyncio async def test_get_llm_model_list_empty(client, auth_header, user_credentials, mocker): """Test LLM model list retrieval with empty result.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_llm_models(*args, **kwargs): return [] - mock_list = mocker.patch('backend.apps.model_managment_app.list_llm_models_for_tenant', side_effect=mock_list_llm_models) + mock_list = mocker.patch('backend.apps.model_management_app.list_llm_models_for_tenant', side_effect=mock_list_llm_models) response = client.get("/model/llm_list", headers=auth_header) @@ -695,10 +695,10 @@ async def mock_list_llm_models(*args, **kwargs): @pytest.mark.asyncio async def test_check_model_health_success(client, auth_header, user_credentials, mocker): """Test successful model health check.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_check = mocker.patch( - 'backend.apps.model_managment_app.check_model_connectivity', + 'backend.apps.model_management_app.check_model_connectivity', return_value={"connectivity": True, "connect_status": "available"} ) @@ -718,10 +718,10 @@ async def test_check_model_health_success(client, auth_header, user_credentials, @pytest.mark.asyncio async def test_check_model_health_lookup_error(client, auth_header, user_credentials, mocker): """Test model health check with lookup error.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mocker.patch( - 'backend.apps.model_managment_app.check_model_connectivity', + 'backend.apps.model_management_app.check_model_connectivity', side_effect=LookupError("missing") ) @@ -738,11 +738,11 @@ async def test_check_model_health_lookup_error(client, auth_header, user_credent async def test_verify_model_config_success(client, auth_header, sample_model_data, mocker): """Test successful model config verification.""" mock_verify = mocker.patch( - 'backend.apps.model_managment_app.verify_model_config_connectivity', + 'backend.apps.model_management_app.verify_model_config_connectivity', return_value={"connectivity": True, "model_name": "gpt-4"} ) mock_suggest = mocker.patch( - 'backend.apps.model_managment_app._capacity_suggestion_for_model_request', + 'backend.apps.model_management_app._capacity_suggestion_for_model_request', return_value={ "suggestions": {"context_window_tokens": 128000}, "match_kind": "catalog_exact", @@ -767,14 +767,14 @@ async def test_verify_model_config_success(client, auth_header, sample_model_dat async def test_verify_model_config_failure_with_error(client, auth_header, sample_model_data, mocker): """Test model config verification failure with detailed error message.""" mock_verify = mocker.patch( - 'backend.apps.model_managment_app.verify_model_config_connectivity', + 'backend.apps.model_management_app.verify_model_config_connectivity', return_value={ "connectivity": False, "model_name": "gpt-4", "error": "Failed to connect to model 'gpt-4' at https://api.openai.com. Please verify the URL, API key, and network connection." } ) - mock_suggest = mocker.patch('backend.apps.model_managment_app._capacity_suggestion_for_model_request') + mock_suggest = mocker.patch('backend.apps.model_management_app._capacity_suggestion_for_model_request') response = client.post( "/model/temporary_healthcheck", json=sample_model_data) @@ -796,7 +796,7 @@ async def test_verify_model_config_failure_with_error(client, auth_header, sampl async def test_verify_model_config_exception(client, auth_header, sample_model_data, mocker): """Test model config verification with exception.""" mocker.patch( - 'backend.apps.model_managment_app.verify_model_config_connectivity', + 'backend.apps.model_management_app.verify_model_config_connectivity', side_effect=Exception("err") ) @@ -809,12 +809,12 @@ async def test_verify_model_config_exception(client, auth_header, sample_model_d @pytest.mark.asyncio async def test_update_single_model_success(client, auth_header, user_credentials, mocker): """Test successful single model update.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_update_single(*args, **kwargs): return None - mock_update = mocker.patch('backend.apps.model_managment_app.update_single_model_for_tenant', side_effect=mock_update_single) + mock_update = mocker.patch('backend.apps.model_management_app.update_single_model_for_tenant', side_effect=mock_update_single) update_data = { "model_id": "test_model_id", @@ -846,10 +846,10 @@ async def mock_update_single(*args, **kwargs): @pytest.mark.asyncio async def test_update_single_model_conflict(client, auth_header, user_credentials, mocker): """Test single model update with name conflict.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_update = mocker.patch( - 'backend.apps.model_managment_app.update_single_model_for_tenant', + 'backend.apps.model_management_app.update_single_model_for_tenant', side_effect=ValueError("Name 'Conflicting Name' is already in use, please choose another display name"), ) @@ -885,12 +885,12 @@ async def test_update_single_model_conflict(client, auth_header, user_credential @pytest.mark.asyncio async def test_batch_update_models_success(client, auth_header, user_credentials, mocker): """Test successful batch model update.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_batch_update(*args, **kwargs): return None - mock_batch_update = mocker.patch('backend.apps.model_managment_app.batch_update_models_for_tenant', side_effect=mock_batch_update) + mock_batch_update = mocker.patch('backend.apps.model_management_app.batch_update_models_for_tenant', side_effect=mock_batch_update) models = [ {"model_id": "id1", "api_key": "k1", "max_tokens": 100}, @@ -908,12 +908,12 @@ async def mock_batch_update(*args, **kwargs): @pytest.mark.asyncio async def test_batch_update_models_exception(client, auth_header, user_credentials, mocker): """Test batch model update with exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_batch_update(*args, **kwargs): raise Exception("Update failed") - mock_batch_update = mocker.patch('backend.apps.model_managment_app.batch_update_models_for_tenant', side_effect=mock_batch_update) + mock_batch_update = mocker.patch('backend.apps.model_management_app.batch_update_models_for_tenant', side_effect=mock_batch_update) models = [{"model_id": "id1", "api_key": "k1"}] response = client.post( @@ -930,7 +930,7 @@ async def mock_batch_update(*args, **kwargs): @pytest.mark.asyncio async def test_get_manage_model_list_success(client, auth_header, user_credentials, mocker): """Test successful manage model list retrieval for a specified tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_models_for_admin(*args, **kwargs): return { @@ -958,7 +958,7 @@ async def mock_list_models_for_admin(*args, **kwargs): "total_pages": 1 } - mock_list = mocker.patch('backend.apps.model_managment_app.list_models_for_admin', side_effect=mock_list_models_for_admin) + mock_list = mocker.patch('backend.apps.model_management_app.list_models_for_admin', side_effect=mock_list_models_for_admin) request_data = { "tenant_id": "target_tenant", @@ -986,7 +986,7 @@ async def mock_list_models_for_admin(*args, **kwargs): @pytest.mark.asyncio async def test_get_manage_model_list_with_pagination(client, auth_header, user_credentials, mocker): """Test manage model list retrieval with pagination parameters.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_models_for_admin(*args, **kwargs): return { @@ -1007,7 +1007,7 @@ async def mock_list_models_for_admin(*args, **kwargs): "total_pages": 3 } - mock_list = mocker.patch('backend.apps.model_managment_app.list_models_for_admin', side_effect=mock_list_models_for_admin) + mock_list = mocker.patch('backend.apps.model_management_app.list_models_for_admin', side_effect=mock_list_models_for_admin) request_data = { "tenant_id": "target_tenant", @@ -1030,12 +1030,12 @@ async def mock_list_models_for_admin(*args, **kwargs): @pytest.mark.asyncio async def test_get_manage_model_list_exception(client, auth_header, user_credentials, mocker): """Test manage model list retrieval with exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_models_for_admin(*args, **kwargs): raise Exception("Database connection error") - mocker.patch('backend.apps.model_managment_app.list_models_for_admin', side_effect=mock_list_models_for_admin) + mocker.patch('backend.apps.model_management_app.list_models_for_admin', side_effect=mock_list_models_for_admin) request_data = { "tenant_id": "target_tenant", @@ -1053,7 +1053,7 @@ async def mock_list_models_for_admin(*args, **kwargs): @pytest.mark.asyncio async def test_get_manage_model_list_empty(client, auth_header, user_credentials, mocker): """Test manage model list retrieval with empty result.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_models_for_admin(*args, **kwargs): return { @@ -1066,7 +1066,7 @@ async def mock_list_models_for_admin(*args, **kwargs): "total_pages": 0 } - mock_list = mocker.patch('backend.apps.model_managment_app.list_models_for_admin', side_effect=mock_list_models_for_admin) + mock_list = mocker.patch('backend.apps.model_management_app.list_models_for_admin', side_effect=mock_list_models_for_admin) request_data = { "tenant_id": "empty_tenant", @@ -1088,12 +1088,12 @@ async def mock_list_models_for_admin(*args, **kwargs): @pytest.mark.asyncio async def test_manage_create_model_success(client, auth_header, user_credentials, mocker): """Test successful model creation for a specified tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _create(*args, **kwargs): return None - mock_create = mocker.patch('backend.apps.model_managment_app.create_model_for_tenant', side_effect=_create) + mock_create = mocker.patch('backend.apps.model_management_app.create_model_for_tenant', side_effect=_create) request_data = { "tenant_id": "target_tenant", @@ -1132,7 +1132,7 @@ async def test_manage_create_model_records_accept_signal_when_present( every accept that landed via the SU surface. """ mocker.patch( - 'backend.apps.model_managment_app.get_current_user_id', + 'backend.apps.model_management_app.get_current_user_id', return_value=user_credentials, ) @@ -1140,11 +1140,11 @@ async def _create(*args, **kwargs): return None mock_create = mocker.patch( - 'backend.apps.model_managment_app.create_model_for_tenant', + 'backend.apps.model_management_app.create_model_for_tenant', side_effect=_create, ) mock_record = mocker.patch( - 'backend.apps.model_managment_app._record_capacity_suggestion_accept' + 'backend.apps.model_management_app._record_capacity_suggestion_accept' ) request_data = { @@ -1173,12 +1173,12 @@ async def _create(*args, **kwargs): @pytest.mark.asyncio async def test_manage_create_model_conflict(client, auth_header, user_credentials, mocker): """Test model creation with conflict error.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _create(*args, **kwargs): raise ValueError("Model name already exists") - mocker.patch('backend.apps.model_managment_app.create_model_for_tenant', side_effect=_create) + mocker.patch('backend.apps.model_management_app.create_model_for_tenant', side_effect=_create) request_data = { "tenant_id": "target_tenant", @@ -1196,12 +1196,12 @@ async def _create(*args, **kwargs): @pytest.mark.asyncio async def test_manage_create_model_exception(client, auth_header, user_credentials, mocker): """Test model creation with unexpected exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _create(*args, **kwargs): raise Exception("Database error") - mocker.patch('backend.apps.model_managment_app.create_model_for_tenant', side_effect=_create) + mocker.patch('backend.apps.model_management_app.create_model_for_tenant', side_effect=_create) request_data = { "tenant_id": "target_tenant", @@ -1219,12 +1219,12 @@ async def _create(*args, **kwargs): @pytest.mark.asyncio async def test_manage_update_model_success(client, auth_header, user_credentials, mocker): """Test successful model update for a specified tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _update(*args, **kwargs): return None - mock_update = mocker.patch('backend.apps.model_managment_app.update_single_model_for_tenant', side_effect=_update) + mock_update = mocker.patch('backend.apps.model_management_app.update_single_model_for_tenant', side_effect=_update) request_data = { "tenant_id": "target_tenant", @@ -1260,7 +1260,7 @@ async def test_manage_update_model_records_accept_signal_when_present( DB update. """ mocker.patch( - 'backend.apps.model_managment_app.get_current_user_id', + 'backend.apps.model_management_app.get_current_user_id', return_value=user_credentials, ) @@ -1268,11 +1268,11 @@ async def _update(*args, **kwargs): return None mock_update = mocker.patch( - 'backend.apps.model_managment_app.update_single_model_for_tenant', + 'backend.apps.model_management_app.update_single_model_for_tenant', side_effect=_update, ) mock_record = mocker.patch( - 'backend.apps.model_managment_app._record_capacity_suggestion_accept' + 'backend.apps.model_management_app._record_capacity_suggestion_accept' ) request_data = { @@ -1300,12 +1300,12 @@ async def _update(*args, **kwargs): @pytest.mark.asyncio async def test_manage_update_model_not_found(client, auth_header, user_credentials, mocker): """Test model update with not found error.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _update(*args, **kwargs): raise LookupError("Model not found") - mocker.patch('backend.apps.model_managment_app.update_single_model_for_tenant', side_effect=_update) + mocker.patch('backend.apps.model_management_app.update_single_model_for_tenant', side_effect=_update) request_data = { "tenant_id": "target_tenant", @@ -1320,12 +1320,12 @@ async def _update(*args, **kwargs): @pytest.mark.asyncio async def test_manage_update_model_conflict(client, auth_header, user_credentials, mocker): """Test model update with conflict error.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _update(*args, **kwargs): raise ValueError("Display name already exists") - mocker.patch('backend.apps.model_managment_app.update_single_model_for_tenant', side_effect=_update) + mocker.patch('backend.apps.model_management_app.update_single_model_for_tenant', side_effect=_update) request_data = { "tenant_id": "target_tenant", @@ -1341,12 +1341,12 @@ async def _update(*args, **kwargs): @pytest.mark.asyncio async def test_manage_delete_model_success(client, auth_header, user_credentials, mocker): """Test successful model deletion for a specified tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _delete(*args, **kwargs): return "test-model" - mock_delete = mocker.patch('backend.apps.model_managment_app.delete_model_for_tenant', side_effect=_delete) + mock_delete = mocker.patch('backend.apps.model_management_app.delete_model_for_tenant', side_effect=_delete) request_data = { "tenant_id": "target_tenant", @@ -1365,12 +1365,12 @@ async def _delete(*args, **kwargs): @pytest.mark.asyncio async def test_manage_delete_model_not_found(client, auth_header, user_credentials, mocker): """Test model deletion with not found error.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _delete(*args, **kwargs): raise LookupError("Model not found") - mocker.patch('backend.apps.model_managment_app.delete_model_for_tenant', side_effect=_delete) + mocker.patch('backend.apps.model_management_app.delete_model_for_tenant', side_effect=_delete) request_data = { "tenant_id": "target_tenant", @@ -1384,12 +1384,12 @@ async def _delete(*args, **kwargs): @pytest.mark.asyncio async def test_manage_delete_model_exception(client, auth_header, user_credentials, mocker): """Test model deletion with unexpected exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _delete(*args, **kwargs): raise Exception("Database error") - mocker.patch('backend.apps.model_managment_app.delete_model_for_tenant', side_effect=_delete) + mocker.patch('backend.apps.model_management_app.delete_model_for_tenant', side_effect=_delete) request_data = { "tenant_id": "target_tenant", @@ -1404,12 +1404,12 @@ async def _delete(*args, **kwargs): @pytest.mark.asyncio async def test_manage_batch_create_models_success(client, auth_header, user_credentials, mocker): """Test successful batch model creation for a specified tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _batch_create(*args, **kwargs): return None - mock_batch_create = mocker.patch('backend.apps.model_managment_app.batch_create_models_for_tenant', side_effect=_batch_create) + mock_batch_create = mocker.patch('backend.apps.model_management_app.batch_create_models_for_tenant', side_effect=_batch_create) request_data = { "tenant_id": "target_tenant", @@ -1473,12 +1473,12 @@ async def _batch_create(*args, **kwargs): @pytest.mark.asyncio async def test_manage_batch_create_models_empty_list(client, auth_header, user_credentials, mocker): """Test batch model creation with empty models list.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _batch_create(*args, **kwargs): return None - mock_batch_create = mocker.patch('backend.apps.model_managment_app.batch_create_models_for_tenant', side_effect=_batch_create) + mock_batch_create = mocker.patch('backend.apps.model_management_app.batch_create_models_for_tenant', side_effect=_batch_create) request_data = { "tenant_id": "target_tenant", @@ -1499,12 +1499,12 @@ async def _batch_create(*args, **kwargs): @pytest.mark.asyncio async def test_manage_batch_create_models_exception(client, auth_header, user_credentials, mocker): """Test batch model creation with exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def _batch_create(*args, **kwargs): raise Exception("Database connection error") - mocker.patch('backend.apps.model_managment_app.batch_create_models_for_tenant', side_effect=_batch_create) + mocker.patch('backend.apps.model_management_app.batch_create_models_for_tenant', side_effect=_batch_create) request_data = { "tenant_id": "target_tenant", @@ -1524,10 +1524,10 @@ async def _batch_create(*args, **kwargs): @pytest.mark.asyncio async def test_manage_healthcheck_success(client, auth_header, user_credentials, mocker): """Test successful model connectivity check for a specified tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_check = mocker.patch( - 'backend.apps.model_managment_app.check_model_connectivity', + 'backend.apps.model_management_app.check_model_connectivity', return_value={"connectivity": True, "connect_status": "available"} ) @@ -1550,10 +1550,10 @@ async def test_manage_healthcheck_without_model_type_is_backward_compatible( client, auth_header, user_credentials, mocker ): """Test model connectivity check still accepts requests without model_type.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mock_check = mocker.patch( - 'backend.apps.model_managment_app.check_model_connectivity', + 'backend.apps.model_management_app.check_model_connectivity', return_value={"connectivity": True, "connect_status": "available"} ) @@ -1570,10 +1570,10 @@ async def test_manage_healthcheck_without_model_type_is_backward_compatible( @pytest.mark.asyncio async def test_manage_healthcheck_model_not_found(client, auth_header, user_credentials, mocker): """Test model connectivity check when model is not found.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mocker.patch( - 'backend.apps.model_managment_app.check_model_connectivity', + 'backend.apps.model_management_app.check_model_connectivity', side_effect=LookupError("Model configuration not found for test-model") ) @@ -1590,10 +1590,10 @@ async def test_manage_healthcheck_model_not_found(client, auth_header, user_cred @pytest.mark.asyncio async def test_manage_healthcheck_invalid_config(client, auth_header, user_credentials, mocker): """Test model connectivity check with invalid model configuration.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mocker.patch( - 'backend.apps.model_managment_app.check_model_connectivity', + 'backend.apps.model_management_app.check_model_connectivity', side_effect=ValueError("Invalid model configuration") ) @@ -1610,10 +1610,10 @@ async def test_manage_healthcheck_invalid_config(client, auth_header, user_crede @pytest.mark.asyncio async def test_manage_healthcheck_exception(client, auth_header, user_credentials, mocker): """Test model connectivity check with unexpected exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) mocker.patch( - 'backend.apps.model_managment_app.check_model_connectivity', + 'backend.apps.model_management_app.check_model_connectivity', side_effect=Exception("Database connection error") ) @@ -1630,7 +1630,7 @@ async def test_manage_healthcheck_exception(client, auth_header, user_credential @pytest.mark.asyncio async def test_manage_provider_list_success(client, auth_header, user_credentials, mocker): """Test successful provider model list retrieval for a specified tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_provider_models(*args, **kwargs): return [ @@ -1654,7 +1654,7 @@ async def mock_list_provider_models(*args, **kwargs): } ] - mock_list = mocker.patch('backend.apps.model_managment_app.list_provider_models_for_tenant', side_effect=mock_list_provider_models) + mock_list = mocker.patch('backend.apps.model_management_app.list_provider_models_for_tenant', side_effect=mock_list_provider_models) request_data = { "tenant_id": "target_tenant", @@ -1673,12 +1673,12 @@ async def mock_list_provider_models(*args, **kwargs): @pytest.mark.asyncio async def test_manage_provider_list_exception(client, auth_header, user_credentials, mocker): """Test provider model list retrieval with exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_provider_models(*args, **kwargs): raise Exception("Provider API error") - mocker.patch('backend.apps.model_managment_app.list_provider_models_for_tenant', side_effect=mock_list_provider_models) + mocker.patch('backend.apps.model_management_app.list_provider_models_for_tenant', side_effect=mock_list_provider_models) request_data = { "tenant_id": "target_tenant", @@ -1693,12 +1693,12 @@ async def mock_list_provider_models(*args, **kwargs): @pytest.mark.asyncio async def test_manage_provider_list_empty(client, auth_header, user_credentials, mocker): """Test provider model list retrieval with empty result.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_list_provider_models(*args, **kwargs): return [] - mock_list = mocker.patch('backend.apps.model_managment_app.list_provider_models_for_tenant', side_effect=mock_list_provider_models) + mock_list = mocker.patch('backend.apps.model_management_app.list_provider_models_for_tenant', side_effect=mock_list_provider_models) request_data = { "tenant_id": "empty_tenant", @@ -1716,7 +1716,7 @@ async def mock_list_provider_models(*args, **kwargs): @pytest.mark.asyncio async def test_manage_provider_create_success(client, auth_header, user_credentials, mocker): """Test successful provider model creation for a specified tenant.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_create_provider_models(*args, **kwargs): return [ @@ -1736,7 +1736,7 @@ async def mock_create_provider_models(*args, **kwargs): } ] - mock_create = mocker.patch('backend.apps.model_managment_app.create_provider_models_for_tenant', side_effect=mock_create_provider_models) + mock_create = mocker.patch('backend.apps.model_management_app.create_provider_models_for_tenant', side_effect=mock_create_provider_models) request_data = { "tenant_id": "target_tenant", @@ -1760,7 +1760,7 @@ async def mock_create_provider_models(*args, **kwargs): @pytest.mark.asyncio async def test_manage_provider_create_with_base_url(client, auth_header, user_credentials, mocker): """Test provider model creation with base URL for modelengine provider.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_create_provider_models(*args, **kwargs): return [ @@ -1773,7 +1773,7 @@ async def mock_create_provider_models(*args, **kwargs): } ] - mock_create = mocker.patch('backend.apps.model_managment_app.create_provider_models_for_tenant', side_effect=mock_create_provider_models) + mock_create = mocker.patch('backend.apps.model_management_app.create_provider_models_for_tenant', side_effect=mock_create_provider_models) request_data = { "tenant_id": "target_tenant", @@ -1794,12 +1794,12 @@ async def mock_create_provider_models(*args, **kwargs): @pytest.mark.asyncio async def test_manage_provider_create_exception(client, auth_header, user_credentials, mocker): """Test provider model creation with exception.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_create_provider_models(*args, **kwargs): raise Exception("Provider API error") - mocker.patch('backend.apps.model_managment_app.create_provider_models_for_tenant', side_effect=mock_create_provider_models) + mocker.patch('backend.apps.model_management_app.create_provider_models_for_tenant', side_effect=mock_create_provider_models) request_data = { "tenant_id": "target_tenant", @@ -1816,12 +1816,12 @@ async def mock_create_provider_models(*args, **kwargs): @pytest.mark.asyncio async def test_manage_provider_create_empty(client, auth_header, user_credentials, mocker): """Test provider model creation with empty result.""" - mocker.patch('backend.apps.model_managment_app.get_current_user_id', return_value=user_credentials) + mocker.patch('backend.apps.model_management_app.get_current_user_id', return_value=user_credentials) async def mock_create_provider_models(*args, **kwargs): return [] - mock_create = mocker.patch('backend.apps.model_managment_app.create_provider_models_for_tenant', side_effect=mock_create_provider_models) + mock_create = mocker.patch('backend.apps.model_management_app.create_provider_models_for_tenant', side_effect=mock_create_provider_models) request_data = { "tenant_id": "target_tenant", @@ -1875,7 +1875,7 @@ def test_model_endpoints_return_401_on_token_expired(client, auth_header, mocker from consts.exceptions import TokenExpiredError mocker.patch( - "backend.apps.model_managment_app.get_current_user_id", + "backend.apps.model_management_app.get_current_user_id", side_effect=TokenExpiredError("expired"), ) response = getattr(client, method)(url, headers=auth_header, **kwargs) diff --git a/test/backend/database/test_model_managment_db.py b/test/backend/database/test_model_management_db.py similarity index 100% rename from test/backend/database/test_model_managment_db.py rename to test/backend/database/test_model_management_db.py