diff --git a/api/app.py b/api/app.py index 99f70f32d5..c018c8a045 100644 --- a/api/app.py +++ b/api/app.py @@ -1,4 +1,12 @@ +from __future__ import annotations + import sys +from typing import TYPE_CHECKING, cast + +if TYPE_CHECKING: + from celery import Celery + + celery: Celery def is_db_command() -> bool: @@ -23,7 +31,7 @@ else: from app_factory import create_app app = create_app() - celery = app.extensions["celery"] + celery = cast("Celery", app.extensions["celery"]) if __name__ == "__main__": app.run(host="0.0.0.0", port=5001) diff --git a/api/app_factory.py b/api/app_factory.py index 07859a3758..dcbc821687 100644 --- a/api/app_factory.py +++ b/api/app_factory.py @@ -149,7 +149,7 @@ def initialize_extensions(app: DifyApp): logger.info("Loaded %s (%s ms)", short_name, round((end_time - start_time) * 1000, 2)) -def create_migrations_app(): +def create_migrations_app() -> DifyApp: app = create_flask_app_with_configs() from extensions import ext_database, ext_migrate diff --git a/api/core/mcp/session/base_session.py b/api/core/mcp/session/base_session.py index 84a6fd0d1f..e1a40593e7 100644 --- a/api/core/mcp/session/base_session.py +++ b/api/core/mcp/session/base_session.py @@ -347,7 +347,7 @@ class BaseSession( message.message.root.model_dump(by_alias=True, mode="json", exclude_none=True) ) - responder = RequestResponder( + responder = RequestResponder[ReceiveRequestT, SendResultT]( request_id=message.message.root.id, request_meta=validated_request.root.params.meta if validated_request.root.params else None, request=validated_request, diff --git a/api/core/model_runtime/model_providers/__base/large_language_model.py b/api/core/model_runtime/model_providers/__base/large_language_model.py index 7a0757f219..8638ee7d64 100644 --- a/api/core/model_runtime/model_providers/__base/large_language_model.py +++ b/api/core/model_runtime/model_providers/__base/large_language_model.py @@ -283,7 +283,7 @@ class LargeLanguageModel(AIModel): # TODO raise self._transform_invoke_error(e) - if stream and isinstance(result, Generator): + if stream and not isinstance(result, LLMResult): return self._invoke_result_generator( model=model, result=result, diff --git a/api/core/model_runtime/model_providers/model_provider_factory.py b/api/core/model_runtime/model_providers/model_provider_factory.py index 64538a6779..9cfc6889ac 100644 --- a/api/core/model_runtime/model_providers/model_provider_factory.py +++ b/api/core/model_runtime/model_providers/model_provider_factory.py @@ -314,6 +314,8 @@ class ModelProviderFactory: elif model_type == ModelType.TTS: return TTSModel.model_validate(init_params) + raise ValueError(f"Unsupported model type: {model_type}") + def get_provider_icon(self, provider: str, icon_type: str, lang: str) -> tuple[bytes, str]: """ Get provider icon diff --git a/api/libs/gmpy2_pkcs10aep_cipher.py b/api/libs/gmpy2_pkcs10aep_cipher.py index 23eb8dca05..ef26699fb3 100644 --- a/api/libs/gmpy2_pkcs10aep_cipher.py +++ b/api/libs/gmpy2_pkcs10aep_cipher.py @@ -136,7 +136,7 @@ class PKCS1OAepCipher: # Step 3a (OS2IP) em_int = bytes_to_long(em) # Step 3b (RSAEP) - m_int = gmpy2.powmod(em_int, self._key.e, self._key.n) + m_int: int = gmpy2.powmod(em_int, self._key.e, self._key.n) # type: ignore[attr-defined] # Step 3c (I2OSP) c = long_to_bytes(m_int, k) return c @@ -169,7 +169,7 @@ class PKCS1OAepCipher: ct_int = bytes_to_long(ciphertext) # Step 2b (RSADP) # m_int = self._key._decrypt(ct_int) - m_int = gmpy2.powmod(ct_int, self._key.d, self._key.n) + m_int: int = gmpy2.powmod(ct_int, self._key.d, self._key.n) # type: ignore[attr-defined] # Complete step 2c (I2OSP) em = long_to_bytes(m_int, k) # Step 3a diff --git a/api/ty.toml b/api/ty.toml index 640ed6cdee..afdd37897e 100644 --- a/api/ty.toml +++ b/api/ty.toml @@ -1,11 +1,6 @@ [src] exclude = [ # deps groups (A1/A2/B/C/D/E) - # A1: foundational runtime typing / provider plumbing - "core/mcp/session", - "core/model_runtime/model_providers", - "core/workflow/nodes/protocols.py", - "libs/gmpy2_pkcs10aep_cipher.py", # A2: workflow engine/nodes "core/workflow", "core/app/workflow", @@ -33,6 +28,3 @@ exclude = [ "tests", ] -[rules] -missing-argument = "ignore" # TODO: restore when **args for constructor is supported properly -possibly-unbound-attribute = "ignore"