feat: mypy for all type check (#10921)

This commit is contained in:
yihong
2024-12-24 18:38:51 +08:00
committed by GitHub
parent c91e8b1737
commit 56e15d09a9
584 changed files with 3975 additions and 2826 deletions

View File

@@ -38,7 +38,7 @@ class CodeLanguage(StrEnum):
class CodeExecutor:
dependencies_cache = {}
dependencies_cache: dict[str, str] = {}
dependencies_cache_lock = Lock()
code_template_transformers: dict[CodeLanguage, type[TemplateTransformer]] = {
@@ -103,19 +103,19 @@ class CodeExecutor:
)
try:
response = response.json()
response_data = response.json()
except:
raise CodeExecutionError("Failed to parse response")
if (code := response.get("code")) != 0:
raise CodeExecutionError(f"Got error code: {code}. Got error msg: {response.get('message')}")
if (code := response_data.get("code")) != 0:
raise CodeExecutionError(f"Got error code: {code}. Got error msg: {response_data.get('message')}")
response = CodeExecutionResponse(**response)
response_code = CodeExecutionResponse(**response_data)
if response.data.error:
raise CodeExecutionError(response.data.error)
if response_code.data.error:
raise CodeExecutionError(response_code.data.error)
return response.data.stdout or ""
return response_code.data.stdout or ""
@classmethod
def execute_workflow_code_template(cls, language: CodeLanguage, code: str, inputs: Mapping[str, Any]):

View File

@@ -1,9 +1,11 @@
from collections.abc import Mapping
from core.helper.code_executor.code_executor import CodeExecutor, CodeLanguage
class Jinja2Formatter:
@classmethod
def format(cls, template: str, inputs: dict) -> str:
def format(cls, template: str, inputs: Mapping[str, str]) -> str:
"""
Format template
:param template: template
@@ -11,5 +13,4 @@ class Jinja2Formatter:
:return:
"""
result = CodeExecutor.execute_workflow_code_template(language=CodeLanguage.JINJA2, code=template, inputs=inputs)
return result["result"]
return str(result.get("result", ""))

View File

@@ -29,8 +29,7 @@ class TemplateTransformer(ABC):
result = re.search(rf"{cls._result_tag}(.*){cls._result_tag}", response, re.DOTALL)
if not result:
raise ValueError("Failed to parse result")
result = result.group(1)
return result
return result.group(1)
@classmethod
def transform_response(cls, response: str) -> Mapping[str, Any]:

View File

@@ -4,7 +4,7 @@ from typing import Any
class LRUCache:
def __init__(self, capacity: int):
self.cache = OrderedDict()
self.cache: OrderedDict[Any, Any] = OrderedDict()
self.capacity = capacity
def get(self, key: Any) -> Any:

View File

@@ -30,7 +30,7 @@ class ProviderCredentialsCache:
except JSONDecodeError:
return None
return cached_provider_credentials
return dict(cached_provider_credentials)
else:
return None

View File

@@ -22,6 +22,7 @@ def check_moderation(model_config: ModelConfigWithCredentialsEntity, text: str)
provider_name = model_config.provider
if using_provider_type == ProviderType.SYSTEM and provider_name in moderation_config.providers:
hosting_openai_config = hosting_configuration.provider_map["openai"]
assert hosting_openai_config is not None
# 2000 text per chunk
length = 2000
@@ -34,8 +35,9 @@ def check_moderation(model_config: ModelConfigWithCredentialsEntity, text: str)
try:
model_type_instance = OpenAIModerationModel()
# FIXME, for type hint using assert or raise ValueError is better here?
moderation_result = model_type_instance.invoke(
model="text-moderation-stable", credentials=hosting_openai_config.credentials, text=text_chunk
model="text-moderation-stable", credentials=hosting_openai_config.credentials or {}, text=text_chunk
)
if moderation_result is True:

View File

@@ -14,12 +14,13 @@ def import_module_from_source(*, module_name: str, py_file_path: AnyStr, use_laz
if existed_spec:
spec = existed_spec
if not spec.loader:
raise Exception(f"Failed to load module {module_name} from {py_file_path}")
raise Exception(f"Failed to load module {module_name} from {py_file_path!r}")
else:
# Refer to: https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly
spec = importlib.util.spec_from_file_location(module_name, py_file_path)
# FIXME: mypy does not support the type of spec.loader
spec = importlib.util.spec_from_file_location(module_name, py_file_path) # type: ignore
if not spec or not spec.loader:
raise Exception(f"Failed to load module {module_name} from {py_file_path}")
raise Exception(f"Failed to load module {module_name} from {py_file_path!r}")
if use_lazy_loader:
# Refer to: https://docs.python.org/3/library/importlib.html#implementing-lazy-imports
spec.loader = importlib.util.LazyLoader(spec.loader)
@@ -29,7 +30,7 @@ def import_module_from_source(*, module_name: str, py_file_path: AnyStr, use_laz
spec.loader.exec_module(module)
return module
except Exception as e:
logging.exception(f"Failed to load module {module_name} from script file '{py_file_path}'")
logging.exception(f"Failed to load module {module_name} from script file '{py_file_path!r}'")
raise e
@@ -57,6 +58,6 @@ def load_single_subclass_from_source(
case 1:
return subclasses[0]
case 0:
raise Exception(f"Missing subclass of {parent_type.__name__} in {script_path}")
raise Exception(f"Missing subclass of {parent_type.__name__} in {script_path!r}")
case _:
raise Exception(f"Multiple subclasses of {parent_type.__name__} in {script_path}")
raise Exception(f"Multiple subclasses of {parent_type.__name__} in {script_path!r}")

View File

@@ -33,7 +33,7 @@ class ToolParameterCache:
except JSONDecodeError:
return None
return cached_tool_parameter
return dict(cached_tool_parameter)
else:
return None

View File

@@ -28,7 +28,7 @@ class ToolProviderCredentialsCache:
except JSONDecodeError:
return None
return cached_provider_credentials
return dict(cached_provider_credentials)
else:
return None