mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-10 07:38:04 -05:00
- **FIX ALL LINT/TYPE ERRORS IN AUTOGPT, FORGE, AND BENCHMARK** ### Linting - Clean up linter configs for `autogpt`, `forge`, and `benchmark` - Add type checking with Pyright - Create unified pre-commit config - Create unified linting and type checking CI workflow ### Testing - Synchronize CI test setups for `autogpt`, `forge`, and `benchmark` - Add missing pytest-cov to benchmark dependencies - Mark GCS tests as slow to speed up pre-commit test runs - Repair `forge` test suite - Add `AgentDB.close()` method for test DB teardown in db_test.py - Use actual temporary dir instead of forge/test_workspace/ - Move left-behind dependencies for moved `forge`-code to from autogpt to forge ### Notable type changes - Replace uses of `ChatModelProvider` by `MultiProvider` - Removed unnecessary exports from various __init__.py - Simplify `FileStorage.open_file` signature by removing `IOBase` from return type union - Implement `S3BinaryIOWrapper(BinaryIO)` type interposer for `S3FileStorage` - Expand overloads of `GCSFileStorage.open_file` for improved typing of read and write modes Had to silence type checking for the extra overloads, because (I think) Pyright is reporting a false-positive: https://github.com/microsoft/pyright/issues/8007 - Change `count_tokens`, `get_tokenizer`, `count_message_tokens` methods on `ModelProvider`s from class methods to instance methods - Move `CompletionModelFunction.schema` method -> helper function `format_function_def_for_openai` in `forge.llm.providers.openai` - Rename `ModelProvider` -> `BaseModelProvider` - Rename `ChatModelProvider` -> `BaseChatModelProvider` - Add type `ChatModelProvider` which is a union of all subclasses of `BaseChatModelProvider` ### Removed rather than fixed - Remove deprecated and broken autogpt/agbenchmark_config/benchmarks.py - Various base classes and properties on base classes in `forge.llm.providers.schema` and `forge.models.providers` ### Fixes for other issues that came to light - Clean up `forge.agent_protocol.api_router`, `forge.agent_protocol.database`, and `forge.agent.agent` - Add fallback behavior to `ImageGeneratorComponent` - Remove test for deprecated failure behavior - Fix `agbenchmark.challenges.builtin` challenge exclusion mechanism on Windows - Fix `_tool_calls_compat_extract_calls` in `forge.llm.providers.openai` - Add support for `any` (= no type specified) in `JSONSchema.typescript_type`
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import contextlib
|
|
import os
|
|
import sys
|
|
from importlib.metadata import version
|
|
|
|
try:
|
|
import poetry.factory # type: ignore # noqa
|
|
except ModuleNotFoundError:
|
|
os.system(f"{sys.executable} -m pip install 'poetry>=1.6.1,<2.0.0'")
|
|
|
|
from poetry.core.constraints.version.version import Version # type: ignore
|
|
from poetry.factory import Factory # type: ignore
|
|
|
|
|
|
def main():
|
|
poetry_project = Factory().create_poetry()
|
|
dependency_group = poetry_project.package.dependency_group("main")
|
|
|
|
missing_packages = []
|
|
for dep in dependency_group.dependencies:
|
|
if dep.is_optional():
|
|
continue
|
|
# Try to verify that the installed version is suitable
|
|
with contextlib.suppress(ModuleNotFoundError):
|
|
installed_version = version(dep.name) # if this fails -> not installed
|
|
if dep.constraint.allows(Version.parse(installed_version)):
|
|
continue
|
|
# If the above verification fails, mark the package as missing
|
|
missing_packages.append(str(dep))
|
|
|
|
if missing_packages:
|
|
print("Missing packages:")
|
|
print(", ".join(missing_packages))
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|